python socket编程之tcp协议多客户端连接
程序员文章站
2024-03-23 09:53:40
...
1.socket 介绍:
socket 原意插座,插孔,计算机中一般称为套接字。 在同一台计算机中的两个程序可以通过文件,管道,队列等方式进行通信;但是在网络中,两台计算机之间的通讯就需要依靠socket进行通信。
2.socket之tcp协议:
tcp 协议英文:Transmission Control Protocol,中文:传输控制协议,是tcp/ip 协议族的一种协议,属于网络协议层中的传输层;是一种面向连接,稳定的(指不会出现丢失数据包的现象),传输速度较慢(相对于udp协议来讲)的协议。
3.python代码实现:
客户端client:
import socket
# 创建TCP连接的socket对象,SOCK_STREAM表示为tcp协议类型
clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接的地址,为元组,第一个值为字符串类型的ip地址,第二个参数为端口号
address = ("", 2426)
# 建立与服务端的连接
clientSocket.connect(address)
while True:
message = input("client send:") # 获取要发送给客户端的信息
# 将信息进行编码以后使用send方法进行发送,
# 在python2中信息可以不用进行编码就可以发送
clientSocket.send(message.encode("utf-8"))
if len(message) == 0:
break
# 当发送信息为空时,断开与服务器的连接
clientSocket.close()
print("连接已断开")
服务器端server:
import socket
from multiprocessing import Process
def get_client_message(clientSocket, clientInfo):
# 在子进程中循环接受客户端发来的信息,直到客户端发送的为空时,结束接收,并断开连接
while True:
recv_data = clientSocket.recv(1024)
if len(recv_data) == 0:
break
else:
print("消息来源%s:%s" % (clientInfo, recv_data.decode("utf-8")))
print("客户端%s连接断开" % (clientInfo,))
clientSocket.close()
if __name__ == '__main__':
# 创建服务端socket对象
serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
addre = ("", 2426)
# 绑定地址和端口号
serverSocket.bind(addre)
# 开启监听,数字表示可同时监听的客户端数目
serverSocket.listen(5)
while True:
# 接受客户端的socket对象和客户端ip,端口信息,
# accept()方法返回的是一个元组,直接进行解包
clientSocket, clientInfo = serverSocket.accept()
# 创建子进程,并执行任务
process = Process(target=get_client_message, args=(clientSocket, clientInfo))
process.start()
process.join()
serverSocket.close()
4.注意点:
- 由于同一时刻每个端口只能被一个进程占用,所以只能和一个客户端建立连接通道,程序可以同时监听到多个客户端而已。
- 多个客户端同時连接时,会进入等待,等待正在连接的客户端释放端口。
最后,欢迎指正,但是都是友军,求别开腔。
上一篇: 数据结构---数组与链表
下一篇: ESP8266工程Makefile分析