关于python socket操作,python的socket用法
本文主要介绍PythonSocket编程。Socket,又称套接字,是所有网络通信的基础。网络通信实际上是进程之间的通信。Socket主要使用IP地址、协议和端口号来标识一个进程。具体如下,可以参考需要的小伙伴。
00-1010 1.正在导入套接字模块2。插座1的基本用法。建立简单的套接字连接。协议3的相应端口。插座功能4。插座功能5。客户机和服务器之间的简单交互。总结前言:.
Socket,又称套接字,是所有网络通信的基础。网络通信实际上是进程之间的通信。Socket主要使用IP地址、协议和端口号来标识一个进程。端口号范围为0~65535(用户端口号一般大于1024),协议种类繁多。一般我们经常用TCP,IP,UDP。让我们仔细看看Socket。
目录
因为要操作套接字,所以需要用到套接字模块,系统中自带的就很不错,下面我们来导入:
导入插座
一、导入Socket模块
二、Socket基本用法
#创建Tcp/Ip套接字
S=Socket.socket (socket.af _ inet,socket.sock _ stream) #流套接字
#创建Udp/Ip套接字
S=Socket.socket (socket.af _ inet,socket.sock _ dgram) #数据报套接字
插座。AF_Unix #只能用于单个Unix系统的进程间通信。
插座。AF_INET6 #只能用于IPv6通信
插座。SOCK_RAW #原来socket可以处理ICMP、ARP等网络消息,其他的不行。
插座。可靠的连续分组服务
1.建立一个简单的Socket连接
应用程序FTP TFTP telnet SMTP DNS http ssh MySQL pop 3 mongo
端口21,20 69 23 25 53 80 22 3306 110 27017
TCP UDP TCP TCP UDP TCP TCP TCP TCP TCP TCP
2.协议对应端口
#创建Socket连接,比Connect更高级,可以自动解析不是数字的主机地址。它与IPv4和IPv6兼容。
socket . create _ connection(address=( localhost ,4320),timeout=4,source _ address=(localhost ,4320)) #前后两个端口号必须一致,否则报错。
#建立一对连接的套接字对象,所有新创建的套接字都是不可继承的。
socket . socket pair(family=socket。AF_INET,type=socket。SOCK_STREAM,proto=0)
#从文件描述符中获取套接字连接对象
socket.fromfd(fd=ab.fileno(),family=socket。AF_INET,type=socket。SOCK_STREAM,proto=0)
#套接字对象的类型
s
ocket.SocketType
#返回套接字的5元组列表地址 ,支持IPV4/IPV6解析
socket.getaddrinfo(host=localhost,port=3453,family=socket.AF_INET,type=socket.SOCK_STREAM,proto=socket.IPPROTO_TCP,flags=0)
output:
[(<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_STREAM: 1>, 6, , (127.0.0.1, 3453))]
#获取主机名
socket.gethostname()
socket.getfqdn()
socket.getfqdn(socket.gethostname())
#将主机名转化为IP地址
socket.gethostbyname(www.baidu.com) #不支持IPV6解析
socket.gethostbyname_ex(www.baidu.com) #返回三元组,(主机名,相同地址的其它可用主机名的列表,IPv4 地址列表)
#网络ip地址
socket.gethostbyname(socket.getfqdn(socket.gethostname()))
#将ip地址转化为主机名,返回三元组(主机名,相同地址的其它可用主机名的列表,IPv4地址列表),支持IPV4/IPV6
socket.gethostbyaddr(192.168.1.4)
#解析主机名或者IP地址
socket.getnameinfo((192.168.1.4,5434),0)
#判断是否支持IPV6
socket.has_ipv6
#返回服务所使用的端口号
socket.getservbyname(https,tcp) #第一个参数为服务协议:Https,Http;第二个为传输协议:Tcp Udp
#返回端口所对应的服务
socket.getservbyport(443,tcp)
#设置主机名(仅限于Unix)
socket.sethostname(name)
#返回网卡信息的列表(仅限于Unix)
socket.if_nameindex()
#32位字节存储Ip地址(序列化)
socket.inet_aton(127.0.0.1)
#将32位字节转化为Ip地址(反序列化)
socket.inet_ntoa(b\x7f\x00\x00\x01)
4.套接字函数
1).服务器端函数
s.bind((host,port)) #将地址绑定到套接字,以(host,port)的元祖形式s.listen(num) #建立最多num个连接,最好别太大
s.accept() #等待并接受客户端的连接,返回新的套接字对象和(host,port)元祖
2).客户端函数
s.connect((host,port)) #建立与服务器的连接,以(host,port)的元祖形式s.connect_ex((host,port)) #和上面的功能差不多,只是出错了不抛异常,只是返回出错码
3).通用函数
s.recv(size,flag) #接收最多size个大小的数据,flag可以忽略,返回值为数据是字符串形式s.send(str,flag) #发送str数据,返回值是要发送的字节数量,可能数据未全部发送
s.sendall(str,flag) #发送全部str数据,成功返回None,失败则抛出异常
s.recv(size,flag) #接受最多size个数据,并以字符串形式返回
s.recvfrom(str,flag) #与recv相同,但是返回值是(接收数据的字符串,发送数据的套接字地址)的元祖形式
s.sendto(str,flag,address) #连接到当前套接字的远程地址。返回值是发送的字节数,主要用于UDP
s.getpeername() #返回连接套接字的远程地址。返回值通常是元组(host,port)
s.getsockname() #返回套接字自己的地址。通常是一个元组(host,port)
s.setsockopt(level,optname,value) # 设置给定套接字选项的值。
#假如端口被socket使用过,并且利用socket.close()来关闭连接,但此时端口还没有释放,要经过TIME_WAIT的过程之后才能使用;为了实现端口的马上复用,可以选择setsocket()函数来达到目的。
#level:选项定义的层次。支持SOL_SOCKET、IPPROTO_TCP、IPPROTO_IP和IPPROTO_IPV6。
#optname:需设置的选项。SO_REUSEADDR SO_REUSEPORT
#value:设置选项的值。
s.getsockopt(level,optname,buflen) #返回套接字选项的值。buflen:缓存长度
s.settimeout(time) #设置socket连接超时时间,单位为秒,超时一般在刚创建套接字时设置
s.gettimeout() #返回当前超时的时间,单位是秒,如果没有设置超时,则返回None。
s.close() #关闭套接字
s.fileno() #套接字的文件描述符
s.shutdown(how) # 关闭连接一边或两边
s.setblocking(bool) #是否阻塞(默认True),如果设置False,那么accept和recv时一旦无数据,则报错。
s.makefile() #创建一个与该套接字相关联的文件
5.一个简单的客户端与服务端交互
Server.py
import sockets=socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建socket对象
s.bind((127.0.0.1,4323)) # 绑定地址
s.listen(5) # 建立5个监听
while True:
conn,addr= s.accept() # 等待客户端连接
print(欢迎{}.format(addr)) #打印访问的用户信息
while True:
data=conn.recv(1024)
dt=data.decode(utf-8) #接收一个1024字节的数据
print(收到:,dt)
aa=input(服务器发出:)
if aa==quit:
conn.close() #关闭来自客户端的连接
s.close() #关闭服务器端连接
else:
conn.send(aa.encode(utf-8)) #发送数据
Client.py
import socketimport sys
c=socket.socket() # 创建socket对象
c.connect((127.0.0.1,4323)) #建立连接
while True:
ab=input(客户端发出:)
if ab==quit:
c.close() #关闭客户端连接
sys.exit(0)
else:
c.send(ab.encode(utf-8)) #发送数据
data=c.recv(1024) #接收一个1024字节的数据
print(收到:,data.decode(utf-8)) #输出接收的信息
可以看到我们实现了一个全双工的Tcp/Ip聊天工具,对于服务器和客户端来说,均可收发文件。
三、总结
Python中的socket编程难度不大,不过你要想写好的Socket也不容易,希望本文能让大家受益匪浅,毕竟小编可是把绝大多数经常用到的Api的功能都展示了。
到此这篇关于Python Socket 编程知识点详细介绍的文章就介绍到这了,更多相关Python Socket 编程内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。