Python3中socket的一種實現方式
阿新 • • 發佈:2017-06-26
div reply auth email str 兩個 env ini 字符串
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017-06-09 22:57 # @Author : wlgo2108 # @Site : # @File : ConnSocket.py # @Software: PyCharm # @Email : [email protected] from socket import * import struct class ConnSocket: def __init__(self,ADDR = ()): self.addr = ADDR self.tcpClientSocket = socket(AF_INET,SOCK_STREAM) self.tcpClientSocket.connect(self.addr) def send_msg(self,msg ): HEADSIZE = 2 msgLen = len(msg) # 定義struct的fmt fmt = ‘!cc‘ + str(msgLen) + ‘s‘ # 字符串打包成我們系統的格式 some = struct.pack(fmt, bytes(chr(int(msgLen / 256)),"utf-8"), bytes(chr(int(msgLen % 256)),"utf-8"), bytes(msg,"utf-8")) # 將字符串發送到後臺 self.tcpClientSocket.sendall(some) # 接收反回報文頭,解析字符串返回長度 recvlen = self.tcpClientSocket.recv(HEADSIZE) li = struct.unpack(‘!BB‘, recvlen) # 返回一個元組,含兩個個元素BB表示兩個無符號字符 # 計算報文長度 recvlen = li[1] + 256 * li[0] # 獲取報文長度的返回字符串 data = self.tcpClientSocket.recv(recvlen) # print data # 關閉socket self.tcpClientSocket.close() # 返回報文返回結果 return data.decode("gb2312") def otherSendMsg(self, msg): HEADSIZE = 4 # 建立socket對象 tcpClientSocket = socket(AF_INET, SOCK_STREAM) # 連接到ADDR ADDR=(HOST,PORT) 是一個元組 tcpClientSocket.connect(self.addr) msgLen = len(msg) fmt = ‘!cc‘ + str(msgLen) + ‘s‘ # 字符串打包成我們系統的格式 some = struct.pack(fmt, chr(msgLen / 256), chr(msgLen % 256), msg) # 將字符串發送到後臺 tcpClientSocket.sendall(some) # 接收反回報文頭,解析字符串返回長度 recvlen = tcpClientSocket.recv(HEADSIZE) print ‘recvlen=‘, recvlen li, = struct.unpack(‘!BB‘, recvlen) # 返回一個元組,含兩個個元素BB表示兩個無符號字符 print ‘li‘, li recvlen = li[1] + 256 * li[0] # 獲取返回字符串 reply = tcpClientSocket.recv(recvlen) # 關閉socket tcpClientSocket.close() return reply
Python3中socket的一種實現方式