python socket编程之双方相互通信简单实例,python连接socket
本文主要介绍python socket套接字通信。底层网络接口socket内置于python标准库,以下代码默认来自SocketPort *。下面很多细节可以参考朋友。
00-1010一、初步了解二。套接字对象
目录
Socket翻译成socket,虽然有人批评,但是我觉得还是挺贴切的。它的功能是提供底层网络服务,最常见的是根据IP传输数据。
所谓传输,需要两个“终端”,首先是一个服务器。
导入插座
s=socket.socket()
Host=socket.gethostname() #本地地址
端口=12345 #端口
S.bind((主机,端口))# bind端口
S.listen(3) #开始监听,最多支持三个链接。
而True:
c,addr=s.accept() #等待连接
打印(链接@地址,地址)
破裂
#下面是send命令。
而True:
数据=输入(“输入数据:”)
c.send(data.encode(utf8 ))
如果数据==退出 :
c .关闭()
破裂
需要注意的是,send要发送的内容是二进制代码,所以通过encode和decode进行编码和解码。如果你最终进入退出,你将退出。
然后写一个客户端
导入插座
s=socket.socket()
host=socket.gethostname()
端口=12345
s.connect((主机,端口))
而True:
data=s.recv(1024)。解码(“utf8”)
如果数据!=b:
打印(“接收数据:”,数据)
#当收到exit时,关闭端口并退出循环。
如果数据[:4]==退出 :
关闭()
破裂
运行之后,服务端和客户端的输入输出分别为
#服务器
链接@地址( 192.168.1.113 ,9953)
输入数据:hello world
11
输入数据:你是谁
11
输入数据:你会说中文吗?
20
输入数据:退出
#客户端
接收数据:你好世界
接收数据:你是谁
接收数据:你会说中文吗?
接收数据:退出
一、初步认识
在上面的例子中,socket对象是通过socket.socket创建的,它的完整构造函数是
socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None)
其中,family表示套接字的地址族,主要包括三类
地址族AF_INETAF_INET6AF_UNIX协议源IPv4IPv6UNIX在创建串口时可以通过OR操作同时选择多个地址族。
type为套接字类型,比较常用的有两种:
SOCK_STREAM,流套接字,特点是发送和接收顺序相同,是安全的。秒
OCK_DGRAM,为数据报格式套接字,特点是快、无顺序、可能丢失
proto为协议号,一般为0,当协议族为AF_CAN时,协议应为CAN_RAW, CAN_BCM, CAN_ISOTP
或 CAN_J1939
。
fileno代表一个创建socket
的文件。
尽管构造函数并无声明客户端与服务端的参数,但从功能来看,二者所能够调用的成员应该并不完全相同。
其中,bind,listen,accept这三个方法为服务端的专有方法,其功能分别为
bind(address):将其绑定到某个地址,其中地址address一般为一个元组,包括IP和端口号
listen(N):启动一个服务器用于接受连接,N为最多连接个数,不小于0。
accept():接受一个连接,无参数,返回值是(conn, address)元组,conn是一个新的socket对象,用于收发数据。
相应地,客户端也有两个专用的方法:
connect(address):连接某个地址。
connect_ex(address):和connect相比,当出现错误时返回错误码,而不报错。
接下来是客户端和服务端均可使用的方法,其中最关键的就是发送send和接收recv。
其中,与发送相关的函数有:
send(bytes):其中bytes为发送字节,返回已发送的字节(有的时候可能并没有发完)。
sendall(bytes):和send相比,会持续发送bytes,直到所有数据都已发送或者报错。
sendfile(file,offset=0,count=None):在Unix下发送文件,在Windows下和send相同,相当于是不可用的。
sendto(bytes,addresss):指定地址发送数据。
在Windows中可用的接收相关函数有两组,其中bufsize表示接收数据的最大字节数。
返回数据返回数据+接收端地址不写入缓冲区recv(bufsize)recvfrom(bufsize)写入缓冲区bufrecv_into(buf,bufsize)recvfrom_into(buf,bufsize)
get-set
是很多模块中都会出现的函数名称,前者代表获取某种参数,后者代表设置某些参数,一般后者的输入为前者的输出。
套接字中止或者关闭的方法有下面几种:
close()
关闭套接字的文件描述符detach()
关闭套接字对象,但并不关闭文件描述符
shutdown(how)可以部分关闭套接字的连接,其中how为:
SHUT_RD:后续不再允许接收
SHUT_WR:后续不再允许发送
SHUT_RDWR:后续的发送和接收都不允许
到此这篇关于python套接字socket通信的文章就介绍到这了,更多相关python socket通信内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。