三. TCP通信实例 1.服务器 tcpSerSock.py 核心操作如下: ss = socket() # 创建服务器套接字 ss.bind() # 地址绑定到套接字上 ss.listen() # 监听连接 inf_loop: # 服务器无限循环 cs = ss.accept() # 接受客户端连接 阻塞式:程序连接之前处于挂起状态 comm_loop: # 通信循环 cs.recv()/cs.send() # 对话 接受与发送数据 cs.close() # 关闭客户端套接字 ss.close() # 关闭服务器套接字 (可选) [python] view plaincopy # -*- coding: utf-8 -*- from socket import * from time import ctime HOST = 'localhost' #主机名 PORT = 21567 #端口号 BUFSIZE = 1024 #缓冲区大小1K ADDR = (HOST,PORT) tcpSerSock = socket(AF_INET, SOCK_STREAM) tcpSerSock.bind(ADDR) #绑定地址到套接字 tcpSerSock.listen(5) #监听 最多同时5个连接进来 while True: #无限循环等待连接到来 try: print 'Waiting for connection ....' tcpCliSock, addr = tcpSerSock.accept() #被动接受客户端连接 print u'Connected client from : ', addr while True: data = tcpCliSock.recv(BUFSIZE) #接受数据 if not data: break else: print 'Client: ',data tcpCliSock.send('[%s] %s' %(ctime(),data)) #时间戳 except Exception,e: print 'Error: ',e tcpSerSock.close() #关闭服务器 2.客户端 tcpCliSock.py 核心操作如下: cs = socket() # 创建客户端套接字 cs.connect() # 尝试连接服务器 comm_loop: # 通讯循环 cs.send()/cs.recv() # 对话 发送接受数据 cs.close() # 关闭客户端套接字 [python] view plaincopy # -*- coding: utf-8 -*- from socket import * HOST = 'localhost' #主机名 PORT = 21567 #端口号 与服务器一致 BUFSIZE = 1024 #缓冲区大小1K ADDR = (HOST,PORT) tcpCliSock = socket(AF_INET, SOCK_STREAM) tcpCliSock.connect(ADDR) #连接服务器 while True: #无限循环等待连接到来 try: data = raw_input('>') if not data: break tcpCliSock.send(data) #发送数据 data = tcpCliSock.recv(BUFSIZE) #接受数据 if not data: break print 'Server: ', data except Exception,e: print 'Error: ',e tcpCliSock.close() #关闭客户端 UDP通信 1.服务器 udpSerSock.py 核心操作如下: ss = socket() # 创建服务器套接字 ss.bind() # 绑定服务器套接字 inf_loop: # 服务器无限循环 cs = ss.recvfrom()/ss.sendto() # 对话 接受与发送数据 ss.close() # 关闭服务器套接字 [python] view plaincopy # -*- coding: utf-8 -*- from socket import * from time import ctime HOST = '' #主机名 PORT = 21567 #端口号 BUFSIZE = 1024 #缓冲区大小1K ADDR = (HOST,PORT) udpSerSock = socket(AF_INET, SOCK_DGRAM) udpSerSock.bind(ADDR) #绑定地址到套接字 while True: #无限循环等待连接到来 try: print 'Waiting for message ....' data, addr = udpSerSock.recvfrom(BUFSIZE) #接受UDP print 'Get client msg is: ', data udpSerSock.sendto('[%s] %s' %(ctime(),data), addr) #发送UDP print 'Received from and returned to: ',addr except Exception,e: print 'Error: ',e udpSerSock.close() #关闭服务器 2.客户端 udpCliSock.py 核心操作如下: cs = socket() # 创建客户端套接字 inf_loop: # 服务器无限循环 cs.sendto()/cs.recvfrom() # 对话 接受与发送数据 cs.close() # 关闭客户端套接字 [python] view plaincopy # -*- coding: utf-8 -*- from socket import * HOST = 'localhost' #主机名 PORT = 21567 #端口号 与服务器一致 BUFSIZE = 1024 #缓冲区大小1K ADDR = (HOST,PORT) udpCliSock = socket(AF_INET, SOCK_DGRAM) while True: #无限循环等待连接到来 try: data = raw_input('>') if not data: break udpCliSock.sendto(data, ADDR) #发送数据 data,ADDR = udpCliSock.recvfrom(BUFSIZE) #接受数据 if not data: break print 'Server : ', data except Exception,e: print 'Error: ',e udpCliSock.close() #关闭客户端