1. 程式人生 > >Python3中socket的一種實現方式

Python3中socket的一種實現方式

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的一種實現方式