一、在编程语言中我们会使用socket(套接字)实现tcp通信 udp通信
①tcp通信原理举例 : 特点:顺序不乱,不丢包
当我们发送 4000字节的内容 一个数据包上线 1500字节,所以发送内容会分为 3个包,每个包都有一个编号。在正式发送数据之前会告知对方要收3个包,
如果发生丢包,对方会告知我们补发一个。
②udp通信协议: 强调实时性。
s = input("请输入一个字符串")
print(s)
二、TCPServer
import socket
AF_INET:使用ipv4网络
SOCK_STREAM:以网络流形式创建socket
1.创建套接字对象
tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2.绑定当前ip和port
tcp_server.bind(('', 8888))
3.开启服务监听
tcp_server.listen(10)
4.等待客户端连接,客户端连接后会产生一个专门跟客户端通信的套接字
tcp_waiter, info = tcp_server.accept()
print(f"info======={info}")
while True:服务器这边只接收数据,并且把接受到的数据打印到屏幕上
data = tcp_waiter.recv(1024)
if not data:
print("客户端已断开连接")
break
s = data.decode()
print(s)
三、thread线程
import threading
import time
class MyThread(threading.Thread):
def __init__(self, content):
super().__init__()
self.content = content
def run(self):线程要执行业务逻辑写在这里
while True:
print(self.content)
time.sleep(1)
th1 = MyThread("我是线程1号")
th2 = MyThread("我是线程2号")
th1.start()
th2.start()
四、TCPClient
import socket
1.创建tcp的套接字对象
tcp_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
2.连接服务端
tcp_client.connect(('120.26.243.208', 8888))
while True:
s = input("请输入你要发送的信息:")
tcp_client.send(s.encode())
五、UDPClient
import socket
import threading
class MsgHandler(threading.Thread):
def __init__(self, client):
super().__init__()
self.client = client
def run(self):
while True:
data, info = self.client.recvfrom(1024)
print(data.decode())
1.创建udp套接字
udp_client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
th = MsgHandler(udp_client)
2.开启线程处理udp信息接收
th.start()
while True:
s = input("我:")
3.udp发送主线程
udp_client.sendto(s.encode(), ('127.0.0.1', 8888))
六、UDPSever
import socket
1.创建udp套接字
udp_server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
2.绑定ip和port
udp_server.bind(('', 8888))
info_ls = set()
while True: 3.等待消息
data, info = udp_server.recvfrom(1024)
print(data.decode())
info_ls.add(info)
4转发消息
for i in info_ls:
buff = str(info).encode() + ":".encode() + data
udp_server.sendto(buff, i)