python socket编程之tcp协议多客户端连接

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协议)