Tcp\UDP通讯
TCP服务器通讯:
import socket sk=socket.socket() sk.bind(('127.0.0.1',8080)) sk.listen() print("正在开启监听模式") client,comment=sk.accept() print(client,comment) while 1: msg_c=client.recv(1024) print(msg_c.decode('utf-8')) msg_s=input('>>>>>>>') client.send(msg_s.encode('utf-8')) client.close() sk.close()
Tcp客户端通讯:
import socket sk=socket.socket() sk.connect(('127.0.0.1',8080)) while 1: msg_c=input('>>>>>>') sk.send(msg_c.encode('utf-8')) msg_s=sk.recv(1024) print(msg_s.decode('utf-8')) sk.close()
UDP服务器:
import socket sk=socket.socket(type=socket.SOCK_DGRAM) sk.bind(('127.0.0.1',9090)) while 1: msg_c,add=sk.recvfrom(1024) print(msg_c.decode('utf-8')) msg_s=input('>>>') sk.sendto(msg_s.encode('utf-8'),add) sk.close()
UDP客户端:
import socket sk=socket.socket(type=socket.SOCK_DGRAM) while 1: msg_c=input('>>>') sk.sendto(msg_c.encode('utf-8'),('127.0.0.1',9090)) msg_r,add=sk.recvfrom(1024) print(msg_r.decode('utf-8')) sk.close()
扩展方法UDP不转utf-8格式:
class my_socket(socket.socket): def __init__(self,encoding='utf-8'): self.encoding=encoding super(my_socket, self).__init__(type=socket.SOCK_DGRAM) def send(self,msg,addr): return self.sendto(msg.encode(self.encoding),addr) def receive(self,num): msg,addr=self.recvfrom(num) return msg.decode(self.encoding),addr
重写socket的一个子类,通过子类调用父类socket方法
udp服务器:
from My_Socket import my_socket sk = my_socket() sk.bind(('127.0.0.1', 8080)) while 1: msg, addr = sk.receive(1024) print(msg) msg_s = input('>>>>>>') sk.send(msg_s, addr) sk.close()
UDP客户端:
from My_Socket import my_socket # sk = my_socket() while 1: msg_c=input('>>>>>') sk.send(msg_c,('127.0.0.1',8080)) msg,addr=sk.receive(1024) print(msg) sk.close()
扩展方法TCP不转utf-8格式:
class my_sockettcp(socket.socket): def __init__(self,encoding="utf-8"): self.encoding=encoding super(my_sockettcp, self).__init__(type=socket.SOCK_STREAM) def Tcpsend(self,cli,msg): return cli.send(msg.encode(self.encoding)) def Tcpreceive(self,cli,num): msg=cli.recv(num) return msg.decode(self.encoding)
TCP服务器:
from My_Socket import my_sockettcp sk=my_sockettcp() sk.bind(('192.168.12.16',18080)) sk.listen() print("正在监听") cli,addr=sk.accept() print(cli) while 1: msg=sk.Tcpreceive(cli,1024) print(msg) msg_s=input('>>>>>') sk.Tcpsend(cli,msg) cli.close() sk.close()
Tcp客户端:
from My_Socket import my_sockettcp sk=my_sockettcp() sk.connect(('192.168.12.16',18080)) while 1: msg=input('>>>>>') sk.Tcpsend(sk,msg) msg_s=sk.Tcpreceive(sk,1024) print(msg_s) sk.close()
Pycharm输出带颜色字体:
\033[字体颜色;背景颜色m 数据 \033[0m
TCP协议的三次握手与四次挥手:
tcp三次握手: 一定是client先发起请求
a 客户端发起请求连接服务器
b 服务器返回 : 接收到请求,并要求连接客户端
c 客户端回复 : 可以连接
四次挥手: 谁先发起断开连接的请求都可以
a 客户端发起断开连接的请求:
意思是: 我想和你断开连接,我没有数据要继续发送了,但是如果你有数据需要发送,我可以继续接收
b 服务器回复 : 我接收到你的请求了
c 服务器发送 : 我已经准备好断开连接了
d 客户端回复 : 收到你的信息,断开连接