TCP的基本构造编写
我们已经写过了UDP类型的多任务,现在我们继续编写TCP类型的多任务相信也并不困难。
我们还是继续温习一下编写一个TCP类型的通讯工具需要哪几步。
发送数据
- 创建TCP类型的套接字
- 连接目标主机
- 发送数据
接收数据
- 创建套接字
- 绑定本地信息
- 设置最大接入次数
- 等待一个新的连接
- 接收来自目标的信息
好了,下面我们就将上面的这些功能全部都写下来。
那么结合多任务的方式就有一点改动,大家请看。
首先创建套接字,绑定本地端口信息,和允许最大接入还有生产新的连接这些信息。
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()
好了,我们看看运行效果。 好了这就是我们看到的效果。