服务端代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | import socketserver
# 定义一个类
class MyServer(socketserver.BaseRequestHandler):
# 如果handle方法出现报错,则会进行跳过.但是setup方法和finish方法无论如何都会进行执行的.
def setup( self ):
print ( "首先执行setup" )
def handle( self ):
print ( "然后执行handle" )
conn = self .request # 定义连接变量
conn.send(( "连接成功,客户端端口:%s" % (conn.getpeername()[ 1 ])).encode()) # 向客户端发送消息
while True :
data = conn.recv( 1024 ) # 接收客户端消息
print (data.decode())
if not data or data = = b 'exit' :
break
conn.send(data)
conn.close()
def finish( self ):
print ( "最后执行finish" )
if __name__ = = "__main__" :
# 创建多线程实例
server = socketserver.ThreadingTCPServer(( "127.0.0.1" , 3120 ) ,MyServer)
# 开启异步多线程,等待连接
server.serve_forever()
|
客户端代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import socket
client = socket.socket()
client.connect(( "127.0.0.1" , 3120 ))
while True :
data = client.recv( 1024 )
print (data.decode())
msg = input ( "请输入要发送的信息..." )
client.send(msg.encode())
if not msg or msg = = "exit" :
break
client.close()
|
为什么是非阻塞通信呢?
原来的tcp通信只能跟一个客户端连接,当另一个客户端来连接的时候,就会阻塞连接不上。socketserver模块采用的就是多线程。 https://www.cnblogs.com/liuhaidon/p/12315690.html
|