Python语言基础-TCP客户端的Socket通信

来源:互联网 发布:淘宝排版软件 编辑:程序博客网 时间:2024/05/17 23:22

1 Python TCP客户端的Socket通信

1.1 连接服务器

self.serverSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

self.serverHost ='10.118.21.61'
self.serverPort =20173

self.serverSock.connect((self.serverHost, self.serverPort))

 

 

 

1.2 发送byte数据

1.2.1 struct构建byte数据:

values = (len(self.action), self.action, self.dataType, len(self.fileName), self.fileName, len(self.source), self.source)s = struct.Struct('<B' + str(len(self.action)) + 'sBB' + str(len(self.fileName)) + 'sI' + str(len(self.source)) + 's')packed_data = s.pack(*values)

 

如果format为sI时,I代表的int十六进制,可能会在前面多出00,原因??

解决办法:需在format最前面加上'<'或者'>'。

 

1.2.2 send函数

self.serverSock.send(reqBytes)//发送字节串
self.serverSock.shutdown(socket.SHUT_WR)//关闭输出流,防止服务器读取时,无法读取到结束符

 

1.3 recv_into函数

 

1.3.1 接受bytearray数据

buffer = bytearray(100)self.serverSock.recv_into(buffer)print binascii.hexlify(buffer)print buffer[0] & 0xffprint buffer[1] & 0xffprint buffer[2] & 0xffi = self.byte4ToInt(buffer, 3)
print i
 

执行结果:

0101000d000000

1

1

0

13

 

1.3.2 byte4ToInt函数

def byte4ToInt(self,bytearray, start):    i = (bytearray[start] & 0xff) \        | (bytearray[start+1] & 0xff) \        | (bytearray[start+2] & 0xff) \        | (bytearray[start+3] & 0xff)    return i
int类型为32bit,即4byte。此处才用从低到高的小字节序(little-debian)的顺序存储int数据。