# -*- coding: utf-8 -*-
import socket
import threading
def server():
"""
TCP 协议
可靠性高:TCP是一种面向连接的协议,它通过建立可靠的连接来保证数据传输的可靠性。当数据包在传输过程中丢失或损坏时,TCP会进行重传,直到数据被完全接收。
流控制:TCP使用滑动窗口机制来控制数据的发送速率,避免网络拥塞。发送方会根据接收方的缓冲情况动态调整发送速率。
有序性:TCP保证数据包的顺序性和完整性,确保接收方能够按照正确的顺序接收到数据。
适用场景:TCP适用于需要可靠数据传输的应用场景,如文件传输、电子邮件等。
:return:
"""
# 新建嵌套字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定端口
server_socket.bind(("localhost", 123))
# 打开监听
server_socket.listen()
while True:
# 等待客户端连接
client_sock, addr = server_socket.accept()
try:
while True:
# 接收消息并返回
data = client_sock.recv(1024)
if len(data) == 0:
break
else:
print(f"收到来自{addr}的消息: {data}")
client_sock.sendall(f"receive data success".encode("utf-8"))
finally:
client_sock.close()
def client():
# 新建嵌套字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
client_socket.connect(("localhost", 123))
try:
for index in range(1):
data = f"{index}: hello world"
client_socket.sendall(data.encode("utf-8"))
print(f"发送消息: {data}")
# with open(r"test.txt", "rb") as f:
# client_socket.sendfile(file=f)
rec = client_socket.recv(1024)
print(rec.decode('utf-8'))
finally:
client_socket.close()
def udp_server():
"""
不可靠性高:UDP是一种无连接的协议,它不保证数据传输的可靠性。当数据包在传输过程中丢失或损坏时,UDP不会进行重传,而是直接丢弃。
快速性:UDP没有复杂的控制流程,因此具有较快的传输速度和较低的延迟。
无序性:UDP不保证数据包的顺序性和完整性,接收方可能收到乱序的数据包。
适用场景:UDP适用于对实时性要求较高、不需要可靠数据传输的应用场景,如视频流媒体、在线游戏等。
:return:
"""
# type=socket.SOCK_DGRAM 意思是指定服务端使用的协议
server = socket.socket(socket.AF_INET, type=socket.SOCK_DGRAM)
server.bind(('localhost', 1234))
while True:
# 接收返回的消息
data, addr = server.recvfrom(1024)
print(f'来自客户端{addr}发送的消息>>>:', data.decode('utf8'))
# msg = input(f'请输入回复给{addr}的消息>>>:')
# server.sendto(msg.encode('utf8'), addr)
def udp_client():
client = socket.socket(socket.AF_INET, type=socket.SOCK_DGRAM)
server_addr = ('localhost', 1234)
while True:
msg = input('发送给服务端>>>:').strip()
client.sendto(msg.encode('utf8'), server_addr)
# data, addr = client.recvfrom(1024)
# print(f'来自服务端{addr}的消息>>>:', data.decode('utf8'))
if __name__ == '__main__':
# TCP socket
# th = threading.Thread(target=server, daemon=True)
# th.start()
#
# th1 = threading.Thread(target=client, daemon=True)
# th2 = threading.Thread(target=client, daemon=True)
# th3 = threading.Thread(target=client, daemon=True)
# th1.start()
# th2.start()
# th3.start()
# client()
# client()
# UDP socket
th1 = threading.Thread(target=udp_server, daemon=True)
th1.start()
udp_client()
python-socket 网络编程
最新推荐文章于 2024-09-07 20:08:36 发布