加粗 斜体 标题 删除线 无序 有序 待办 引用
TCP协议的基础框架
1、服务端
import socket
# 创建服务端
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定服务器的IP和端口
server.bind(('127.0.0.1', 8848)) # 这个IP在同一台机子上调试用
# 监听
server.listen(5)
# 连接循环
while True:
conn, client = server.accept()
# 通信循环
while True:
try:
data = conn.recv(1024)
print("客户信息:", data.decode("utf-8"))
msg = input('>>:').strip()
conn.send(msg.encode("utf-8"))
except ConnectionResetError as err:
break # 这个报错是对方断开连接后停止循环
# 断开连接
conn.close()
# 关闭服务器
server.close()
2、客户端
import socket
# 创建客户端
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务端
client.connect(('127.0.0.1', 8848)) # 这个IP在同一台机子上调试用
# 通信循环
while True:
msg = input('>>:').strip()
if not msg:
continue
phone.send(msg.encode("utf-8"))
data = client.recv(1024)
print(data.decode("utf-8")
#关闭客户端
client.close()
UDP协议的基础框架
1、服务端
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 8848))
while True:
data, client_addr = server.recvfrom(1024)
print(data)
server.sendto(data.upper(), client_addr)
server.close()
2、客户端
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
msg = input('>>:').strip()
client.sendto(msg.encode(), ('127.0.0.1', 8848))
data, server_addr = client.recvfrom(1024)
print(data, server_addr)
client.close()
TCP协议和UDP协议的区别
1、TCP协议的接收和发送分别是:recv()和send();
UDP协议的接收和发送分别是:recvfrom()和sendto()。
2、TCP协议需要连接循环;UDP协议不需要。
3、TCP协议不能发空消息;UDP协议可以。
4、TCP协议发送数据可靠,不易丢失,出错;UDP协议发送数据不可靠,易丢失。
5、UDP协议在收发数据时,因为之前没有连接服务器,所以要在收发数据的后面加上IP和端口。
6、TCP协议会产生粘包现象;UDP协议不会,一个sendto对应一个recvfrom。
(上面的代码TCP结构存在粘包现象,而且不能并发)