文档详情

对 Python Socket 编程的初探 学习资料.docx

发布:2019-09-06约7.89千字共9页下载文档
文本预览下载声明
socket编程步骤 服务端创建一个socket,绑定地址和端口,然后监听端口上传入的连接,一旦有连接进来,就通过accept函数接收传入的连接。 客户端也是创建一个socket。绑定远程地址和端口,然后建立连接,发送数据。 服务端socket 下面通过一段实例代码来详细说明 服务端 socker_server.py Python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 importsocket importsys ? HOST=?????????????? PORT=10000?????????????? s=None forres insocket.getaddrinfo(HOST,PORT,socket.AF_UNSPEC, ??????????????????????????????socket.SOCK_STREAM,0,socket.AI_PASSIVE): ????af,socktype,proto,canonname,sa=res ????try: ????????s=socket.socket(af,socktype,proto) ????exceptsocket.error asmsg: ????????s=None ????????continue ????try: ????????s.bind(sa) ????????s.listen(5) ????exceptsocket.error asmsg: ????????s.close() ????????s=None ????????continue ????break ifsisNone: ????printcould not open socket ????sys.exit(1) conn,addr=s.accept() printConnected by,addr while1: ????data=conn.recv(1024) ????ifnotdata:break ????conn.send(data) conn.close() 首先我们通过socket.getaddrinnfo函数将host/port转换成一个包含5元组的序列。这个5元组包含我们创建一个socket连接所需要的所有必要参数。返回的5元组分别是 (family, sockettype, proto, canonname, sockaddr) family 地址簇,用与socket()函数的第一个参数。主要有以下几个 qq1900526093 socket.AF_UNIX 用与单一机器下的进程通信 socket.AF_INET 用与服务器之间相互通信,通常都用这个。 socket.AF_INET6 支持IPv6 sockettype socket类型,用与socket()函数的第二个参数,常用的有 socket.SOCK_STREAM 默认,用于TCP协议 socket.SOCK_DGRAM 用于UDP协议 proto 协议,用于socket()函数的第三个参数。 getaddrinnfo函数会根据地址格式和socket类型,返回合适的协议 canonname 一个规范化的host name。 sockaddr 描述了一个socket address .是一个二元组,主要用于bind()和connect()函数 接下来创建一个socket对象,传入getaddrinnfo函数返回的af,sockettype,proto。 Python 1 s=socket.socket(af,socktype,proto) 然后绑定socket address Python 1 s.bind(sa) 开启监听模式 Python 1 s.listen(5) listen函数会监听连接到socket上的连接,参数表示在拒绝连接之前系统可以挂起的最大连接队列数量为5。这些连接还没有被accept处理。数量不能无限大,通常指定5。 一旦我们监听到了连接,就会调用accept函数接收连接 Python 1 conn,addr=s.accept() accept函数返回一个二元组,conn是一个新的socket对象,用来接收和发送数据。addr表示另一端的socket地址。 接下来我们就可以用conn对象发送和接收数据了 Python 1 2 data=conn.recv(1024)# 接收数据, 这里指定一次最多接收的字符数量为1024 conn.send(data)# 发送数据 这里我们接收到一个连接socket就会停止运行,所以如果要循环连接的话,将accept函数放
显示全部
相似文档