建立两个py文件,分别打开两个cmd界面,即可进行通信。服务器端运用多进程,连续不断的处理从客户端接收到的数据;客户端通过一个list不断给客户端发送数据。
(每个连接都必须创建新线程(或进程)来处理,否则,单线程在处理连接的过程中,无法接受其他客户端的连接。)本例中,多进程其实没有起到作用。
代码以及解释如下:
#socket服务器端程序 import socket import time from multiprocessing import Process #多进程和多线程一样的用法 def tcplink(sock1,addr1): #新建一个函数,用来接收客户端发来的信息 print(‘Accept new connection......‘) sock1.send(b‘welcom‘) #若连接建立成果,服务器给客户端发送一个welcome while 1: #服务器持续接收客户端发送过来的数据,直到服务器收到exit时,退出不在接收数据 data = sock1.recv(1024) #接收数据 time.sleep(1) #延时1s ‘‘‘data为客户端发送给服务器的数据,服务器给客户端发送hello,%data ,全部转为utf-8编码‘‘‘ sock1.send((‘hello,%s‘%data.decode(‘utf-8‘)).encode(‘utf-8‘)) if not data or data.decode(‘utf-8‘) == ‘exit‘: break sock1.close() #连接关闭 print(‘connection form %s is close....‘%addr1) if __name__ == "__main__": s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #建立一个套接字 ‘‘‘监听端口127.0.0.1表示客户端和服务器必须都为本机才能运行。 我们要绑定监听的地址和端口。服务器可能有多块网卡,可以绑定到 某一块网卡的IP地址上,也可以用0.0.0.0绑定到所有的网络地址,还 可以用127.0.0.1绑定到本机地址。127.0.0.1是一个特殊的IP地址,表 示本机地址,如果绑定到这个地址,客户端必须同时在本机运行才能连接 ,也就是说,外部的计算机无法连接进来。端口号需要预先指定。因为我 们写的这个服务不是标准服务,所以用9999这个端口号。请注意,小于1024 的端口号必须要有管理员权限才能绑定:‘‘‘ s.bind((‘127.0.0.1‘, 9999)) s.listen(1) #同时接收连接的最大数量 print(‘Waiting for connecting......‘) while 1: #服务器通过一个循环来一直接收来之客户端发送的信息 sock,addr = s.accept() #s.accept返回两个数据 t = Process(target=tcplink,args=(sock,addr)) #多线程 t.start() #开启多线程
#socket客户端程序 #同chenhang001.py 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‘)) #打印接收到的数据 #发送数据,定义一个list, for data111 in [b‘chenhang‘,b‘wangyadan‘,b‘wuhankejidaxue‘,b‘wuchangfenxiao‘]: s.send(data111) print(s.recv(1024).decode(‘utf-8‘)) # for a in range(100): # s.send(b(a)) s.send(b‘exit‘) #发送exit字符,服务器退出接收数据
原文:http://www.cnblogs.com/hanggegege/p/5745033.html