UDP与TCP协议
1.UDP
UDP的概念:用户数据报协议, 是一个无连接的简单的面向数据报的运输层协议
UDP的特点:UDP是面向无连接的通讯协议, UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接, 所以可以实现广播发送。
UDP的适用情况:UDP是面向消息的协议, 通信时不需要建立连接, 数据的传输自然是不可靠的, UDP一般用于多点通信和实时的数据业务。
UDP程序思路:
- 创建客户端套接字
- 发送/接收数据
- 关闭套接字
UDP程序(发送数据):
import socket
def send():
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
dest_addr = ('172.27.35.1',8080)
send_data = input("请输入发送的数据:")
udp_socket.sendto(send_data.encode('utf-8'),dest_addr)
udp_socket.close()
UDP程序(接收数据):
def receice():
udpSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udpSocket.bind(("", 8081))
recvData = udpSocket.recvfrom(1024)
content, destInfo = recvData
print("目标机:%s" % content.decode("utf-8"))
udpSocket.close()
2.TCP
TCP程序思路:
- socket创建一个套接字
- bind绑定ip和port
- listen使套接字变为可以被动链接
- accept等待客户端的链接
- recv/send接收发送数据
TCP写客户端程序:
def client():
tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_ip = input('请输入服务器IP:')
server_port = int(input('请输入服务器端口:'))
tcp_socket.connect((server_ip,server_port))
while True:
send_data = input('请输入发送内容:')
tcp_socket.send(send_data.encode('utf-8'))
receive_data = tcp_socket.recv(1024)
print('服务端:',receive_data.decode('utf-8'))
if receive_data.decode('utf-8') == '1':
break
tcp_socket.close()
TCP写服务器程序:
def server():
tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcp_socket.bind(('',8080))
tcp_socket.listen(128)
conn, addr = tcp_socket.accept()
print('connected by', addr)
while True:
data = conn.recv(1024)
data = data.decode('utf-8')
if data == 'close':
break
print('recieved message:', data)
send = input('return:')
conn.sendall(send.encode('utf-8'))
conn.close()
tcp_socket.close()