服务端:FORK模型
import os
from socket import *
import signal
server_addr = ("0.0.0.0", 8080)
s = socket()
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
s.bind(server_addr)
s.listen(5)
signal.signal(signal.SIGCHLD, signal.SIG_IGN)
print("waiting for connecting....")
def handle(c):
while True:
try:
data = c.recv(1024)
except Exception as e:
print(e)
break
if not data:
break
print(data.decode())
n = c.send(b"OK")
print("send %d byte" % n)
c.close()
while True:
try:
c, addr = s.accept()
print("Connect from:", addr)
except KeyboardInterrupt:
print("server exit")
os._exit(0)
except Exception as e:
print(e)
continue
pid = os.fork()
if pid == 0:
s.close()
handle(c)
os._exit(0)
else:
c.close()
服务端Process模型
import os
from socket import *
import signal
from multiprocessing import Process
server_addr = ("0.0.0.0", 8080)
s = socket()
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
s.bind(server_addr)
s.listen(5)
signal.signal(signal.SIGCHLD, signal.SIG_IGN)
print("waiting for connecting....")
def handle(c):
while True:
try:
data = c.recv(1024)
except Exception as e:
print(e)
break
if not data:
break
print(data.decode())
n = c.send(b"OK")
print("send %d byte" % n)
c.close()
while True:
try:
c, addr = s.accept()
print("Connect from:", addr)
except KeyboardInterrupt:
print("server exit")
os._exit(0)
except Exception as e:
print(e)
continue
p = Process(target=handle, args=(c,), daemon=True)
p.start()
客户端:
from socket import *
server_addr = ("192.168.27.189", 8080)
sock = socket()
print("waiting for connecting....")
sock.connect(server_addr)
print("connected...")
while True:
nick = input("nick:")
if nick != "":
break
while True:
msg = input("Msg>>")
if not msg:
break
msg = "%s:%s" % (nick, msg)
sock.send(msg.encode())
data = sock.recv(1024)
if not data:
break
print(data)
sock.close()