田小花语音机器人(五)python使用socke模块建立多客户端链接同一个服务器

参考了以下教程
python实现tcp服务器客户端(支持多客户端)

PYTHON SOCKET编程详细介绍

错误警告: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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章