python进阶第六天

    技术2023-09-29  75

    网络编程之TCP


    01.TCP特点

    面向连接可靠传输 • TCP采用发送应答机制 • 超时重传 • 错误校验 • 流量控制和阻塞管理

    02.TCP和UDP区别

    TCP面向连接;UDP是无连接的,即发送数据之前不需要建立连接。TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序- 到达;UDP尽最大努力交付,即不保证可靠交付。UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通-信。每一条TCP连接只能是点到点的:UDP支付一对一,一对多和多对一和多对多的交互通信。 TCP对系统资源要求较多,UDP对系统资源要求较少。

    03.TCP客户端构建流程

    1.创建socket 2.链接服务器 3.接收数据 4.关闭套接字 上代码

    import socket def main(): #1.创建套接字 tcp_client=socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM) #2.连接服务器 sever_ip=input("sever ip:") sever_port=int(input("sever port:")) tcp_client.connect((sever_ip,sever_port)) #3.发送数据 send_data=input("发送到数据:") tcp_client.send((send_data.encode())) #4.接收服务器端发过来的数据 阻塞,等待服务器发送数据 recv_data=tcp_client.recv(1024)# 最大接收1024 print(recv_data.decode("gbk"))#windows环境下,gbk 如果使用utf8会报错 #5.关闭套接字 tcp_client.close() if __name__ == '__main__': main()

    04.TCP服务端构建流程

    1.socket创建套接字 2.bind绑定IP和port 3.listen使套接字变为可以被动链接 4.accept等待客户端的链接 5.recv/send接收发送数据 上代码

    import socket def main(): tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcp_server.bind(("192.168.20.216", 7890)) tcp_server.listen(128) new_client_socket, client_addr = tcp_server.accept() recv_data = new_client_socket.recv(1024) print(recv_data.decode("gbk")) send_data = input("请输入你要发送给client的信息:") new_client_socket.send(send_data.encode("gbk")) if __name__ == '__main__': main()

    05.TCP优化实例

    需求:实现TCP服务端为多个客户端服务, 此程序需要注意的是(当一个客户端的服务结束之后就会自动断开,为等待的一个客户端服务),只能服务一次,无法多次为一个客户端服务

    import socket def main(): tcp_server=socket.socket(socket.AF_INET,type=socket.SOCK_STREAM) tcp_server.bind(("192.168.0.4",7890)) while True: tcp_server.listen(128) new_socket, client_addr = tcp_server.accept() print(client_addr) """ 1.允许多个客户端 连接 2.允许为客户端多次服务的 3.但是 当前 只允许 为一个客户端 进行多次服务 (多线程) """ while True: recv_data = new_socket.recv(1024) print(recv_data) if recv_data.decode("gbk"): send_data = "hello" new_socket.send(send_data.encode("gbk")) else: break # 跳出循环 if recv_data.decode("gbk"): send_data = "hello" new_socket.send(send_data.encode("gbk")) else: break # 跳出循环 # 关闭连接 new_socket.close() tcp_server.close() if __name__ == '__main__': main()

    06.总结:TCP通讯流程

    Processed: 0.012, SQL: 9