具体见笔记socket及socketservr,默认TCP,使用UDP不需要握手
服务器可接收多个:收发要同步
基本框架代码:
socket:
import socket
import threading
def link_handler(link,client):
print('服务器开始接收来自[%s:%s]的请求'%(client[0],client[1]))
while True:
cd = link.recv(1024).decode()
if cd == 'exit':
print('结束[%s:%s]通讯'%(client[0],client[1]))#client[0]:ip地址,【1】端口
break
print('来自[%s:%s]向客户端发来的信息:%s' % (client[0],client[1] ,cd))
link.sendall('服务器接收到消息了'.encode())
s=socket.socket()
IP_PORT=('127.0.0.1',9999)
s.bind(IP_PORT)
s.listen(5)
print('启动socket服务,等待客户端连接。。。')
while True:
conn,address=s.accept()#连接的管道和ip地址及端口
t=threading.Thread(target=link_handler,args=(conn,address))
t.start()
客户端:
import socket
IP_PORT=('127.0.0.1',9999)
s=socket.socket()
s.connect(IP_PORT)
while True:
inp=input('请输入').strip()#限制不为空
if not inp:
continue
s.sendall(inp.encode())
if inp=='exit':#正常关闭
print('通讯结束')
break
sd=s.recv(1024).decode()
print(sd)
s.close()
socketserver:
服务器:
import socketserver
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
conn=self.request
conn.sendall('发送信息'.encode())#收发一致,服务器发则客户端就要有收
while True:
data=conn.recv(1024).decode()
if data=='exit':
print('断开与%s的连接'%(self.client_address))
break
print('来自%s的客户端发来信息:%s:'%(self.client_address,data))
conn.sendall(('收到信息:%s'%data).encode())
if __name__ == '__main__':
server=socketserver.ThreadingTCPServer(('127.0.0.1',9999),MyServer)
print('启动socketserver服务器')
server.serve_forever()
客户端:
import socket
IP_PORT=('127.0.0.1',9999)
s=socket.socket()
s.connect(IP_PORT)
while True:
sd = s.recv(1024).decode()
print(sd)#收发一致
inp=input('请输入').strip()#限制不为空
if not inp:
continue
s.sendall(inp.encode())
if inp=='exit':#正常关闭
print('通讯结束')
break
sd=s.recv(1024).decode()
print(sd)
s.close()