欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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.注意点:

  1. 由于同一时刻每个端口只能被一个进程占用,所以只能和一个客户端建立连接通道,程序可以同时监听到多个客户端而已。
  2. 多个客户端同時连接时,会进入等待,等待正在连接的客户端释放端口。

最后,欢迎指正,但是都是友军,求别开腔。

相关标签: socket tcp协议