参考了以下教程
python实现tcp服务器客户端(支持多客户端)
错误警告:socketserver OSError: [Errno 98] Address already in use
客户端和服务器端实现以下功能:
1、服务器端通过建立子线程来服务客户端发送过来的数据;
2、客户端每向服务器端发送一个数据,服务器都会把接收到数据传递回来。
服务器端程序:
#!/usr/bin/python3.7
# coding=utf-8
from socket import *
import threading
address='127.0.0.1' #监听哪些网络 127.0.0.1是监听本机 0.0.0.0是监听整个网络
port=12345 #监听自己的哪个端口
buffsize=1024 #接收从客户端发来的数据的缓存区大小
s = socket(AF_INET, SOCK_STREAM)
s.bind((address,port))
s.listen(5) #最大连接数
def tcplink(sock,addr):
while True:
recvdata=clientsock.recv(buffsize).decode('utf-8')
if recvdata=='exit' or not recvdata:
break
senddata=recvdata+'from sever'
clientsock.send(senddata.encode())
clientsock.close()
while True:
clientsock,clientaddress=s.accept()
print('connect from:',clientaddress)
#传输数据都利用clientsock,和s无关
t=threading.Thread(target=tcplink,args=(clientsock,clientaddress)) #t为新创建的线程
t.start()
客户端程序:
#!/usr/bin/python3.7
# coding=utf-8
#客户端与上一个没有任何改变
from socket import *
address='127.0.0.1' #服务器的ip地址
port=12345 #服务器的端口号
buffsize=1024 #接收数据的缓存大小
s=socket(AF_INET, SOCK_STREAM)
s.connect((address,port))
while True:
senddata=input('想要发送的数据:')
if senddata=='exit':
break
s.send(senddata.encode())
recvdata=s.recv(buffsize).decode('utf-8')
print(recvdata)
s.close()
运行结果:
客户端
想要发送的数据:hi
hifrom sever
想要发送的数据:
服务器端
connect from: ('127.0.0.1', 49218)
在运行过程中需要注意一些问题
在终端直接运行输入就会报错!!!!
2333333333
田小花 发布了10 篇原创文章 · 获赞 11 · 访问量 1125 私信 关注