为服务端增加多线程解决方案
1、服务端代码如下:
***这个版本并没有真正的起到多线程的作用,主要原因在于t.join();以后的版本会改进这个问题***
#!/usr/bin/python #!coding:utf-8 import os,sys,time from socket import * import threading def handleClient(conn): print '[info] handleClient is :{0}'.format(os.getpid()) while True: data = conn.recv(1024) if not data : print '[info] handleClient client is stoped ..';break print '[info] handleClient recive this --> {0}'.format(data.encode()) reply='[info] handleClient this is the information from server --> {0}'.format(data.decode()) conn.send(reply.encode()) conn.close() sys.exit(0) if __name__ == "__main__": hostIp='127.0.0.1' port=2048 sock=socket(AF_INET,SOCK_STREAM) sock.bind((hostIp,port)) sock.listen(5) print '[info] parent pid is :{0} start listen {1}'.format(os.getpid(),(hostIp,port)) while True: conn,addr=sock.accept() print '[info] parent get a client {0}'.format(addr) t=threading.Thread(target=handleClient,args=(conn,)) t.start() t.join()
2、客户端代码如下:
#!/usr/bin/python #!coding:utf-8 from socket import * import os,sys if __name__ == "__main__": #定义套接字 hostIp='127.0.0.1' port=2048 sock=socket(AF_INET,SOCK_STREAM) messages=['hello I am a client'] messages=messages+sys.argv[1:] sock.connect((hostIp,port)) print '[info] 已经连接到server ' for message in messages: sock.send(message.encode()) print sock.recv(1024).decode() sock.close()