1. 编程的概念
# 客户端示例代码 import socket # socket.AF_INET, socket.SOCK_STREAM默认参数 socket_instance = socket.socket(socket.AF_INET, socket.SOCK_STREAM) socket_instance.connect(('www.baidu.com', 80))
2.( )类详细解释 3.服务器端如何写
接下来我们来解释一下TCP服务器和TCP客户端的代码示例。 记得看一下代码的注释,这样才能看懂代码:
# TCP服务端代码示例 import socket from pprint import pprint # 创建TCP连接 socket_instance = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # bind方法的参数是ip和端口组成的元组表示address socket_instance.bind(('127.0.0.1', 9000)) # 操作系统可以挂起的最大连接数,如果同一时间的连接数超过5,拒绝其他的连接 socket_instance.listen(5) # 死循环,循环接收新的客户端连接 while True: # 接收客户端的请求,且获取新socket对象和客户端信息 new_socket, client_addr = socket_instance.accept() # 阻塞,等待握手 # 循环接收已连接的客户端发送的数据 while True: # 从缓存区中读取1024字节信息 ,使用decode()方法进行解码 data = new_socket.recv(1024).decode() # 阻塞的 # 返回客户端的一下信息 pprint(data) # 返回客户端地址 ('127.0.0.1', 51978) pprint(client_addr) # 把服务器的数据发送回客户端,使用encode()方法把字符串编码成二进制 new_socket.sendall('服务器端已经拿到你的消息'.encode()) # TCP客户端代码实现 import socket # 创建TCP连接 socket_instance = socket.socket(socket.AF_INET, socket.SOCK_STREAM) socket_instance.connect(('127.0.0.1', 9000)) # 进行三次握手 while True: cmd = input("请输入您想说的话:") socket_instance.send(cmd.encode()) # 把数据发送到服务端 data = socket_instance.recv(1024) print(data.decode())
因为代码格式可能比较乱,所以放上代码的图片,代码格式参考图中的
TCP代码图片
现在我们已经编写了 TCP 服务器和客户端(在两个不同的 .py 文件中),让我们运行代码看看效果。 首先运行服务端代码的.py文件(鼠标右键->运行test.py),然后运行客户端代码(鼠标右键->运行test1.py),客户端会提示我们输入我们要输入的内容想说的话,如图:
客户打印.jpg
服务器打印.jpg
需要注意的是,我们不能通过TCP客户端连接UDP服务器,也不能通过UDP客户端连接TCP服务器,即客户端和服务器的协议必须相同
4.UDP服务器端和客户端代码实现
# UDP服务器端代码实现 import socket # 创建UDP连接 socket_instance = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) socket_instance.bind(('127.0.0.1', 9000)) # 循环接收新的客户端连接 while True: # 接收客户端的请求,且获取新socket对象和客户端信息 data, client_addr = socket_instance.recvfrom(1024) print(data.decode()) socket_instance.sendto('Server has receive your data'.encode(), client_addr) # UDP客户端代码实现 import socket # 创建socket实例 socket_instance = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True: data = input("请输入您想说的话:") socket_instance.sendto(data.encode(), ('127.0.0.1', 9000)) data, server_addr = socket_instance.recvfrom(1024) print(data.decode())
然后依次运行服务器端代码和客户端代码,步骤与TCP类似
UDP 的代码图像
5.UDP服务器实现步骤
1.创建 socket 对象; 2.向socket 对象绑定服务器地址; 3.进入与客户端交互数据的循环阶段; 4.接收客户端发来的数据(包括 bytes 对象 data,以及客户端的 IP 地址和端口号 addr,其中 addr 为二元组 (host, port); 5.打印接收信息,表示从地址为 addr 的客户端接收到数据); 6.关闭;
6.UDP客户端实现步骤
1.创建 socket 对象; 2.初始化 UDP 服务器的地址; 3.进入与服务器交互数据的循环阶段; 4.等待用户输入数据; 5.向服务器端发送接收数据; 6.关闭套接字,不再向服务器发送数据;
7. TCP和UDP有什么区别? 8、与服务器端实例对象创建连接的方法有:
参考: