socket语法

python版本为3.5.X

socket--Low-level networking interface

This module provides access to the BSD socket interface.

1.创建socket实例:

     import socket

     sk = socket.socket()

    对象sk常用的方法如下:

     sk.bind(address)  :将套接字绑定到地址,地址的格式取决于地址族,在AF_INET下,以元组形式表示('ip_address',port) 如:('192.168.1.254',8888)。[服务端使用]

     sk.listen(backlog) :开始监听传入的连接,backlog指定队列中最大连接数,超过则拒绝连接。[服务端使用]

     sk.setblocking(pool):是否阻塞,默认为True ,如果设为False,那么accept和recv时一旦无数据时,则报错。

     sk.accept()            :接受连接并返回(conn,addr),基中conn为套接字对象,可以用来发送和接收数据如:conn.recv(1024),conn.sendall(string) ,

                                   addr为客户端的地址  [服务端使用]

      sk.connect(address):连接到address处的套接字,address一般为元组。

      sk.close(): 关闭套接字

      sk.recv(1024):最大接收1024字节的数据,接收数据为二进制。

      sk.send(data)

      sk.sendall(data):发送的数据为二进制; sendall方法是不停的调用send方法,直到数据发送完为止。

      sk.settimeout(timeout):  设置套接字操作的超时期,timeout为一个浮点数,单位是秒,如果为None则没有超时期。一般超时期应该在刚创建套接字时设置,用于连接操作(如client连接最多等待几秒)。

      sk.getpeername():返回连接套接字的远程地址,通常为元组(ipaddr,port)。

      sk.getsockname():返回套接字自己的地址,通常为一个元组(ipaddr,port)。

2. 示例一个简单的ftp:

服务端:

 1 import socket
 2 ip_addr = ('192.168.1.254',8888)
 3 sk = socket.socket()
 4 sk.bind(ip_addr)
 5 sk.listen(5) 
 6 
 7 #循环处理连接
 8 while True:
 9     conn,addr = sk.accept()
10     data = conn.recv(1024)               #设定一次接收1024字节,数据为二进制
11     print(str(data,encoding='utf8'))    #将二进制数据转化为字符串并打印
12     conn.sendall(bytes('hello',encoding='utf8'))   #发送数据到客户端

客户端:

 1 import socket
 2 ip_addr = ('192.168.1.254',8888)
 3 sk = socket.socket()  #创建socket套接字对象
 4 sk.connect(ip_addr)   #连接服务端
 5 
 6 while True:
 7     sk.sendall(bytes('hello world',encoding='utf8'))
 8     data = sk.recv(1024)
 9     print(str(data,encoding='utf8'))
10 sk.close()
原文地址:https://www.cnblogs.com/oleli/p/5313806.html