Socket通讯之TCP多任务
Kubrnete 555 3

TCP的基本构造编写

我们已经写过了UDP类型的多任务,现在我们继续编写TCP类型的多任务相信也并不困难。

我们还是继续温习一下编写一个TCP类型的通讯工具需要哪几步。

发送数据

  1. 创建TCP类型的套接字
  2. 连接目标主机
  3. 发送数据

接收数据

  1. 创建套接字
  2. 绑定本地信息
  3. 设置最大接入次数
  4. 等待一个新的连接
  5. 接收来自目标的信息

好了,下面我们就将上面的这些功能全部都写下来。

那么结合多任务的方式就有一点改动,大家请看。

首先创建套接字,绑定本地端口信息,和允许最大接入还有生产新的连接这些信息。

def main():
    # 创建TCP类型套接字
    socket_TCP = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 绑定本地信息
    ip_port = (("127.0.0.1"), 1234)
    socket_TCP.bind(ip_port)
    # 设置最大裂解数
    socket_TCP.listen(128)
    """等待新的连接"""
    socket_new_TCP, Address = socket_TCP.accept()

然后就是用死循环写下我们要循环发送的数据。

def Send(socket_new_TCP):
    while True:
        socket_data = input("请输入你要发送的信息:")
        socket_new_TCP.send(socket_data.encode("gbk"))

最后也就是接收数据了。

def Rece(socket_new_TCP, Address):
    while True:
        socket_data = socket_new_TCP.recv(1024)
        ip = Address[0]
        port = Address[1]
        print("[*] 来自 %s:%s 的消息为:%s" % (ip, port, socket_data.decode("gbk")))

利用threading模块实现多任务

接下来我们就可以使用多线程了。

    p1 = threading.Thread(target=Send, args=(socket_new_TCP,))
    p2 = threading.Thread(target=Rece, args=(socket_new_TCP, Address))
    p1.start()
    p2.start()

最后整理一下。

import socket
import threading


def main():
    # 创建TCP类型套接字
    socket_TCP = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 绑定本地信息
    ip_port = (("127.0.0.1"), 1234)
    socket_TCP.bind(ip_port)
    # 设置最大裂解数
    socket_TCP.listen(128)
    """等待新的连接"""
    socket_new_TCP, Address = socket_TCP.accept()
    p1 = threading.Thread(target=Send, args=(socket_new_TCP,))
    p2 = threading.Thread(target=Rece, args=(socket_new_TCP, Address))
    p1.start()
    p2.start()


def Send(socket_new_TCP):
    while True:
        socket_data = input("请输入你要发送的信息:")
        socket_new_TCP.send(socket_data.encode("gbk"))


def Rece(socket_new_TCP, Address):
    while True:
        socket_data = socket_new_TCP.recv(1024)
        ip = Address[0]
        port = Address[1]
        print("[*] 来自 %s:%s 的消息为:%s" % (ip, port, socket_data.decode("gbk")))


if __name__ == '__main__':
    main()

好了,我们看看运行效果。 Socket通讯之TCP多任务 好了这就是我们看到的效果。

评论区

索引目录