udp和tcp流程概述

udp

端口号

知名端口:系统使用的端口, 范围0-1023

动态端口:程序员给应用程序设置的端口,范围1024-65535,提示:如果程序员没有给程序设置端口号那么系统会自动在1024-65535找一个空闲端口号去设置

socket

翻译中文就是套接字,可以理解成数据的搬运工,负责把数据从一方传递给另外一方,不同电脑之间进程通信使用的工具就是socket,也称为插座,发送数据的时候需要准备一个插座,对方接收数据也要准备一个插座

创建socket:

udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

绑定端口bind:绑定端口的时候不需要指定ip地址,因为需要兼容多个网卡的情况

udp_socket.bind(("", 9090))

发送数据格式:发送数据 window 网络调试助手使用gbk解码,乌班图网络调试助手使用utf-8解码

udp_socket.sendto(send_data, ('localhost', 端口号))

接收数据格式: 服务端和客户端必须在同一网段

recv_data, ip_port = udp_socket.recvfrom(1024)

关闭:

udp_socket..close()

发送广播消息

首先,创建socket

udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True)

udp_socket.sendto("大家好,我叫小于同学,多多关照!".encode("gbk"), ("255.255.255.255", 9090))


tcp

客户端

创建:

tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

和服务端建立连接:

tcp_client_socket.connect(("192.168.107.160", 9090))

发送数据

tcp_client_socket.send()

接收数据

recv_data = tcp_client_socket.recv(1024)

recv_content = recv_data.decode('utf-8')

关闭

tcp_client_socket.close()

服务端

创建socket(同上)

程序退出,立即释放端口:

tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)

绑定端口

tcp_client_socket.bind(('ip地址', 端口号))

设置监听——把主动套接字改成被动套接字, 被动套接字只能接收客户端的连接请求,不能收发消息;128: 最大等待连接数

tcp_server_socket.listen(128)

处理客户端的连接请求

service_client_socket, ip_port = tcp_server_socket.accept()

接收客户端信息——关闭socket,recv接收的数据长度为0

recv_data = service_client_socket.recv(1024)

发送数据(回复客户端)

service_client_socket.send('ok'.encode('utf-8'))

终止和客户端的服务(两个socket均需要关闭)

service_client_socket.close()

tcp_server_socket.close()

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容