最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python Socket編程詳細介紹

 更新時間:2017年03月23日 17:10:11   作者:kongxx  
這篇文章主要介紹了Python Socket編程詳細介紹,socket可以建立連接,傳遞數據,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

在使用Python做socket編程時,由于需要使用阻塞(默認)的方式來讀取數據流,此時對于數據的結束每次都需要自己處理,太麻煩。并且網上也沒找到太好的封裝,所以就自己寫了個簡單的封裝。

封裝思路

1. 客戶端每次請求均發(fā)送一個 SocketRequest 對象,其中封裝具體的數據,這里使用json。對于要發(fā)送的數據,會自動添加一個結束符標識(EOF = ‘0x00')。

2. 服務器端接收數據時,根據結束符標識來生成完整的數據,并解包成 SocketRequest 對象。

3. 服務器端根據 SocketRequest 的內容,來生成 SocketResponse 對象,這里使用了一個 SimpleRequestHandler 類來處理,例子中就是沒有做任何處理,然后原樣返回。

4. 服務器端發(fā)送 SocketResponse 給客戶端。其中也需要對包做一個封裝,會自動添加一個結束符標識(EOF = ‘0x00')。

5. 客戶接收數據時,根據結束符標識來生成完整的數據,并解包成 SocketResponse 對象,然后返回。

封裝類

sockets.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
import pickle
import thread


PORT = 12345
EOF = '0x00'


class SocketServer(object):

  def __init__(self, port=None):
    self.port = port

  def startup(self):
    sock_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock_server.bind(('0.0.0.0', self.port))
    sock_server.listen(0)

    while True:
      sock, address = sock_server.accept()
      thread.start_new_thread(self.__invoke, (sock, address))

  def shutdown(self):
    pass

  def __invoke(self, sock, address):
    try:
      full_data = ''
      while True:
        data = sock.recv(1024)
        if data is None:
          return

        full_data += data
        if full_data.endswith(EOF):
          full_data = full_data[0:len(full_data) - len(EOF)]
          request = pickle.loads(full_data)
          response = SimpleRequestHandler().handle(request)
          sock.sendall(pickle.dumps(response) + EOF)
          return
    except Exception as e:
      print e
    finally:
      sock.close()


class SocketClient(object):

  def __init__(self, host, port):
    self.host = host
    self.port = port

  def execute(self, request):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((self.host, self.port))

    try:
      sock.sendall(pickle.dumps(request) + EOF)
      full_data = ''
      while True:
        data = sock.recv(1024)
        if data:
          full_data += data
          if full_data.endswith(EOF):
            full_data = full_data[0:len(full_data) - len(EOF)]
            response = pickle.loads(full_data)
            return response
        else:
          return None
    except Exception as e:
      print e
      return None
    finally:
      sock.close()


class SocketRequest(object):
  def __init__(self, data):
    self.data = data

  def __repr__(self):
    return repr(self.__dict__)


class SocketResponse(object):
  def __init__(self, data):
    self.data = data

  def __repr__(self):
    return repr(self.__dict__)


class SimpleRequestHandler(object):
  def __init__(self):
    pass

  def __repr__(self):
    return repr(self.__dict__)

  def handle(self, request):
    return SocketResponse(request.data)

測試

socket_server.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from agent.sockets import *

ss = SocketServer(PORT)
ss.startup()

socket_client.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pickle
from agent.sockets import *


sc = SocketClient('localhost', PORT)
request = SocketRequest('abc')
response = sc.execute(request)
print request
print response

運行測試

首先,運行 socket_server.py

然后,運行 socket_client.py

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python函數中的函數(閉包)用法實例

    Python函數中的函數(閉包)用法實例

    這篇文章主要介紹了Python函數中的函數(閉包)用法,結合實例形式分析了Python閉包的定義與使用技巧,需要的朋友可以參考下
    2016-03-03
  • python 數據的清理行為實例詳解

    python 數據的清理行為實例詳解

    這篇文章主要介紹了python 數據的清理行為實例詳解的相關資料,需要的朋友可以參考下
    2017-07-07
  • python文本進度條實例

    python文本進度條實例

    這篇文章主要為大家介紹了python文本進度條,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • python神經網絡ShuffleNetV2模型復現詳解

    python神經網絡ShuffleNetV2模型復現詳解

    這篇文章主要為大家介紹了python神經網絡ShuffleNetV2模型復現詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • python實現可下載音樂的音樂播放器

    python實現可下載音樂的音樂播放器

    這篇文章主要為大家詳細介紹了python實現可下載音樂的音樂播放器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • python并發(fā)編程多進程之守護進程原理解析

    python并發(fā)編程多進程之守護進程原理解析

    這篇文章主要介紹了python并發(fā)編程多進程之守護進程原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • 在python里從協程返回一個值的示例

    在python里從協程返回一個值的示例

    今天小編就為大家分享一篇在python里從協程返回一個值的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • 使用tensorflow實現VGG網絡,訓練mnist數據集方式

    使用tensorflow實現VGG網絡,訓練mnist數據集方式

    這篇文章主要介紹了使用tensorflow實現VGG網絡,訓練mnist數據集方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python 制作自動化翻譯工具

    Python 制作自動化翻譯工具

    這篇文章主要介紹了Python 實現自動化翻譯和替換的腳本,幫助大家更好的理解和學習使用python,提高辦公效率感興趣的朋友可以了解下
    2021-04-04
  • [項目布局配置]Nosql與PythonWeb-Flask框架組合

    [項目布局配置]Nosql與PythonWeb-Flask框架組合

    本文主要描述了怎樣使用輕量級NoSQL數據庫與PythonWeb-Flask框架組合來進行項目布局及應用配置,需要的同學可以參考下,希望可以對大家有所進益
    2021-08-08

最新評論

永年县| 澄江县| 盐城市| 南阳市| 永康市| 巴彦淖尔市| 朝阳区| 拉孜县| 开原市| 杭州市| 高密市| 商河县| 阳朔县| 嵩明县| 鞍山市| 河南省| 来凤县| 新乐市| 和静县| 崇阳县| 连江县| 泽库县| 宜川县| 金门县| 大丰市| 牟定县| 秦皇岛市| 华容县| 方山县| 秦安县| 同德县| 漳州市| 商水县| 自贡市| 美姑县| 攀枝花市| 安康市| 九台市| 灵山县| 广丰县| 藁城市|