单进程服务器
from socket import *
serSocket = socket(AF_INET,SOCK_STREAM)
#重复使用绑定的信息
serSocket.setsockopt(sol_socket,so_reuseaddr,1) #四次挥手,服务器先结束,而且想立即运行服务器,还能绑定
localAddr = ("",7788)
serSocket.bind(localAddr)
serSocket.listen(5)
while True:
print("-----主进程,等待新客户端的到来-----")
newSocket,destAddr = serSocket.accept()
print("-----主进程,接下来负责数据处理")
try:
while True:
recvData = newSocket.recv(1024)
if len(recvData)>0:
print('recv[%s]:%s'%(str(destAddr),recvData))
else:
print('[%s]客户端已经关闭'%str(destAddr))
break
finally:
newSocket.close()
serSocket.close()
多进程服务器:
from socket import *
from multiprocessing import *
from time import sleep
def dealWithClient(newSocket,destAddr):
while True:
recvData = newSocket.recv(1024)
if len(recvData)>0:
print('recv[%s]:%s'%(str(destAddr),recvData))
else:
print('[%s]客户端已经关闭'%str(destAddr))
break
newSocket.close()
def main():
serSocket = socket(AF_INET,SOCK_STREAM)
#重复使用绑定的信息
serSocket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #四次挥手,服务器先结束,而且想立即运行服务器,还能绑定
localAddr = ("",7788)
serSocket.bind(localAddr)
serSocket.listen(5)
try:
while True:
print("-----主进程,等待新客户端的到来-----")
newSocket,destAddr = serSocket.accept()
print("-----主进程,接下来负责数据处理[%s]-----"%str(destAddr))
client = Process(target = dealWithClient,args=(newSocket,destAddr))
client.start() #因为已经向子进程中copy了一份(引用),并且父进程中这个套接字也没有用处了,所以关闭
newSocket.close()
finally:
serSocket.close()
if __name__ == "__main__":
main()
多线程服务器:
from socket import *
from multiprocessing import *
from time import sleep
def dealWithClient(newSocket,destAddr):
while True:
recvData = newSocket.recv(1024)
if len(recvData)>0:
print('recv[%s]:%s'%(str(destAddr),recvData))
else:
print('[%s]客户端已经关闭'%str(destAddr))
break
newSocket.close()
def main():
serSocket = socket(AF_INET,SOCK_STREAM)
#重复使用绑定的信息
serSocket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #四次挥手,服务器先结束,而且想立即运行服务器,还能绑定
localAddr = ("",7788)
serSocket.bind(localAddr)
serSocket.listen(5)
try:
while True:
print("-----主进程,等待新客户端的到来-----")
newSocket,destAddr = serSocket.accept()
print("-----主进程,接下来负责数据处理[%s]-----"%str(destAddr))
client = Thread(target = dealWithClient,args=(newSocket,destAddr))
client.start()
#因为线程中共享这个套接字,如果关闭了会导致这个套接字不可用,
#但是此时在线程中这个套接字可能还在接收数据,因此不能关闭
#newSocket.close()
finally:
serSocket.close()
if __name__ == "__main__":
main()