python TCP编程再试牛刀

跟上一篇一样,这篇也是对照着廖雪峰的python教程里面的代码来敲的:

该示例演示的是C-S服务模型,Server端接收来自客户端的请求,然后只是很简单地给客户端返回“Hello” + 来自客户端的原文。核心在于两端socket的创建和连接以及数据的发送和接收。

Server端:Server.py:

# -*- coding: utf-8 -*-
'''
Created on 2016年8月3日

@author: lv.lang
'''
import socket
import time, threading

#创建一个基于ipv4和TCP协议的Socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#监听端口
s.bind(('127.0.0.1',9999)) #将socket绑定地址和端口
s.listen(5)  #传入参数指定等待连接的最大数量
print('Waiting for connection...')

def tcplink(sock, addr):
    print('Accept new connection from %s:%s...' % addr)
    sock.send(b'Welcome!')
    while True:
        data = sock.recv(1024)
        time.sleep(1)
        if not data or data.decode('utf-8') == 'exit':
            break
        sock.send(('Hello, %s!' % data.decode('utf-8')).encode('utf-8'))
    sock.close()
    s.close()
    print('Connection from %s:%s closed.' % addr)

#用一个永久循环来接受来自客户端的连接
while True:
    #接受一个连接
    sock, addr = s.accept()
    #创建新线程来处理TCP连接
    t = threading.Thread(target = tcplink, args = (sock, addr))
    t.start()


(1)首先创建用于TCP连接的Socket

(2)将socket和地址及端口绑定

(3)监听端口

(4)用个死循环监听端口进来的数据

(5)每接收到一次数据都创建一个线程来处理

(6)对数据进行打包,返回给客户端

(7)关闭TCP连接


客户端Client.py:

# -*- coding: utf-8 -*- 

'''
Created on 2016年8月3日

@author: lv.lang
'''
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接
s.connect(('127.0.0.1', 9999))
# 接收欢迎信息
print(s.recv(1024).decode('utf-8'))
for data in [b'Michael', b'Tracy', b'Sarah']:
    # 发送数据
    s.send(data)
    print(s.recv(1024).decode('utf-8'))
s.send(b'exit')
s.close()

(1)首先创建用于TCP连接的Socket

(2)将socket和地址及端口绑定

(3)发送数据

(4)接收数据,并将其打印

(5)关闭TCP连接


运行结果:

先运行Server.py:



再运行Client.py:




原文地址:https://www.cnblogs.com/lvlang/p/10586422.html