网络编程 1.socket
2021/12/15 9:17:58
本文主要是介绍网络编程 1.socket,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
socket
socket(套接字),是支持TCP/IP网络通信的基本操作单元,提供的方法可以实现数据的发送和接收 socket可以看作是不同主机之间进程进行双向通信的端点,即通信双方的一种约定 网络上各种服务大多基于socket完成通信,如网页、email等 | 应用程序 | | 应用程序 | | 套接字 | | 套接字 | | UDP/TCP(传输方式) | | UDP/TCP(传输方式) | | IP(网络协议地址) | → 通信通道 IP 通信通道 → | IP(网络协议地址) | socket起源于Unix,Unix基本思想之一就是一切皆文件,即对于文件,用打开、读写、关闭的模式来操作 socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket类就是对其进行的操作(读写I/O、开、关) 多条信息发送到同一地址且未接收时,会以队列的方式储存在socket的接收缓冲区 发送端/接收端端口绑定 发送端:可以不绑定端口,接收端:必须绑定端口 每次运行网络程序时,如果没有确定用哪个端口,系统默认会随机分配 网络程序运行过程中,端口号唯一标识这个程序 如果其他计算机上的程序想向此程序发送数据,那么向这个端口号标识的程序发送即可 广播 广播地址(broadcast address)是专门用于同时向网络中所有工作站进行发送的一个地址 在使用TCP/IP协议的网络中,主机标识段host ID全部为1的IP地址为广播地址:255.255.255.255 socket socket.socket(AddressFamily,Type) 功能:创建socket对象 参数: AddressFamily(地址簇):socket.AF_INET 默认,IPv4 socket.AF_INET6 IPv6 Type(类型):socket.SOCK_STREAM 默认,流式socket,for TCP socket.SOCK_DGRAM 数据报式socket,for UDP obj.sendto(data.encode(),Address) 功能:发送数据 参数: data.encode():数据的二进制格式 Address:('IP',port),接收端信息,第一个元素为字符串的IP地址,第二个元素为整型的端口号 obj.recvfrom(m) 功能:接收数据,此方法会造成程序阻塞,直至接收到另一台计算机发送的数据才解除阻塞 参数: m:接收缓冲区大小,每次接收m字节的数据 返回值:tuple,第一个元素为二进制格式的数据内容,第二个元素为发送端的Address obj.bind(Address) 功能:将socket对象绑定到一个地址,这个地址必须是没有被占用的,否则连接失败 参数: Address:('IP',port),本机信息,IP可省略,表示本机的任何一个IP 接收端IP写为'',当计算机有多个网卡时,不同网卡的数据都能被接收 obj.setsockopt(socket,属性,属性值) 功能:设置权限 参数: socket: socket.SOL_SOCKET:当前socket 属性: socket.SO_BROADCAST:广播 socket.SO_REUSEADDR:socket地址可重用 属性值:bool obj.connect(Address) 功能:与服务端建立连接 参数:服务端的IP、port obj.listen(n) 功能:设置socket为被动监听模式,此时不能主动发送数据 参数:允许连接的最大客户端数,此限制只在Windows下生效,Linux下无效 obj.accept() 功能:开始接收客户端连接,默认进入阻塞,等待客户端连接,有客户端连接时解除阻塞 返回值:两个元素的tuple,第一个元素为与连接客户端对应的socket对象,第二个元素为客户端Address
# 创建socket # python中使用socket模块中的socket类来创建 import socket # 创建套接字,使用IPv4,UDP udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 端口绑定 addr = ('192.168.124.35',9999) udp_socket.bind(addr) # 发送数据 addr_st = ('192.168.124.35',8080) context_byte = 'wow'.encode() udp_socket.sendto(context_byte,addr_st) # 接收数据 # 接收二进制数据 recv_data = udp_socket.recvfrom(1024) # 解码数据 recv_text = recv_data[0].decode('GBK') # 输出接收到的内容 print(f'收到来自:{recv_data[1]}的数据:' + recv_text) # 关闭套接字 udp_socket.close()
这篇关于网络编程 1.socket的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-04el-table 开启定时器下,表格的选中状态会消失是什么原因-icode9专业技术文章分享
- 2024-10-03如何安装和初始化飞牛私有云 fnOS?-icode9专业技术文章分享
- 2024-10-03如何安装 App 并连接到飞牛 NAS?-icode9专业技术文章分享
- 2024-10-03如何安装飞牛 TV 并连接到影视服务器?-icode9专业技术文章分享
- 2024-10-03如何在PVE和ESXI上安装飞牛私有云 fnOS?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS安装系统异常情况处理-icode9专业技术文章分享
- 2024-10-03飞牛NAS如何创建存储空间?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS硬盘会自动休眠吗?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS如何安装飞牛影视和创建媒体库?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS如何为家人朋友开通影视账号?-icode9专业技术文章分享