0
点赞
收藏
分享

微信扫一扫

tcp网络程序的实现步骤,看这个就够了


1. tcp简介

  • TCP 面向连接、可靠的、基于字节流的传输控制协议
  • TCP的特点
  • 面向连接
  • 可靠传输
  • 应答机制
  • 超时重传
  • 错误校验
  • 流量管控
  • TCP通信模型

TCP严格区分客户端、服务端

2. tcp网络程序-客户端

  • 实现步骤
  • 导入模块
  • 创建套接字

socket.SOCK_STREAM

  • 建立连接

tcp_client_socket.connect( (“服务端ip”, 服务端端口) )

  • 发送数据

tcp_client_socket.send(“内容”.encode())

  • 接收数据

recv_data = tcp_client_socket.recv(1024)

recv_data 是接收到的数据的二进制

  • 关闭连接

3. tcp网络程序-服务器

  • 导入模块
  • 创建套接字
  • 绑定端口
  • 开启监听(把套接字由主动设置为被动模式)

tcp_server_socket.listen(128) 最大允许128个连接

  • 等待客户端连接

new_client_socket,client_ip_port = tcp_server_socket.accept()

new_client_socket 新的套接字,只是服务当前的客户端

client_ip_port 客户端端口和ip地址

  • 使用新的套接字接收客户端发送的信息

new_client_socket.recv(1024)

  • 关闭新的套接字

new_client_socket.close() 关闭和当前客户端的连接

  • 关闭服务器套接字

tcp_server_socket.close() 服务器不再接收新的客户端,老客户端可以继续服务

4. tcp网络程序-服务器增强

  • 循环接收多条信息

while True: # recv() 会让程序再次阻塞,收到信息后再接阻塞 recv_data = new_client_socket.recv(1024) # 当接受到数据为 空 的时候,表示客户端已经断开连接了,服务端也要断开 # if len(recv_data)!= 0: # b'xxxx' # 如果recv_data 非空即为真,否则为假 if recv_data: recv_text = recv_data.decode("GBK") print("接收到[%s]的信息:%s" % (str(client_ip_port), recv_text)) else: print("客户端已经断开连接!") break

  • 循环接受多个客户端连接

while True: new_client_socket, client_ip_port = tcp_server_socket.accept() print("新客户端来了:%s" % str(client_ip_port)) # 6、收发数据 while True: # recv() 会让程序再次阻塞,收到信息后再接阻塞 recv_data = new_client_socket.recv(1024) # 当接受到数据为 空 的时候,表示客户端已经断开连接了,服务端也要断开 # if len(recv_data)!= 0: # b'xxxx' # 如果recv_data 非空即为真,否则为假 if recv_data: recv_text = recv_data.decode("GBK") print("接收到[%s]的信息:%s" % (str(client_ip_port), recv_text)) else: print("客户端已经断开连接!") break # new_client_socket.close() 表示不能再和当前的客户端通信了 new_client_socket.close()

注意:必须等待第一个客户端断开后,第二个客户端才能有机会连接

案例:文件下载器(一)

  • 客户端

目标:
/home/demo/Document/python_projects/day04/1.txt
下载到
/home/demo/Desktop/1.txt

1、导入模块
2、创建套接字
3、建立连接
4、接收用户输入的文件名
5、发送文件名到服务端
6、创建文件,并且准备保存
7、接收服务端发送的数据,保存到本地(循环)
8、关闭套接字

  • 服务器:

1、导入模块
2、创建套接字
3、绑定端口
4、设置监听,设置套接字由主动为被动
5、接受客户端连接
6、接收客户端发送的文件名
7、根据文件名读取文件内容
8、把读取的内容发送给客户端(循环)
9、关闭和当前客户端的连接
10、关闭服务器

案例:文件下载器(二)

  • with open(“文件名”, 打开方式) as file

file = open(文件名,打开方式)


举报

相关推荐

0 条评论