国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python-socket網絡編程

zero / 2846人閱讀

摘要:網絡編程學習本文主要介紹網絡通信,以及的通信例子網絡通信是嵌套字的意思,可以理解為與們間的在線會話。關于通信可以看這里簡單理解多線程下開啟一個對于服務端,需要做件事情開啟設置配置綁定端口幀監聽,收發包多線程關于報錯模塊提供個函數。

  

http://homeway.me/


python網絡編程學習 本文主要介紹socket網絡通信,以及python的socket通信例子


0x01.socket網絡通信

socket是嵌套字的意思,可以理解為server與client們間的在線會話。



關于socket通信可以看這里:

http://queengina.com/2014/10/09/簡單理解Socket/




0x02.多線程socket


python下開啟一個socket

對于server服務端,python socket需要做4件事情

1.開啟socket

2.設置配置socket

3.綁定端口

4.幀監聽,收發包


多線程socket
  

=> server.py

#!/usr/bin/python
# -*- coding:utf-8 -*-
import socket 
import threading 
import time
import sys

clients = [] 
class RecvMsg(threading.Thread): 
    def __init__(self, sock): 
        threading.Thread.__init__(self) 
        self.sock = sock 
    def run(self): 
        global clients 
        while True: 
            msg = self.sock.recv(512) 
            print "recv=>",msg 
            for client in clients: 
                if client != self.sock:
                    message = {}
                    message["id"] = self.sock
                    message["time"] = time.time()
                    message["type"] = "server send"
                    print "send=>", message
                    client.send( str(message) )
                    pass
                pass

def main( port ): 
    sock = socket.socket() 
    sock.bind(( socket.gethostname(), int(port) )) 
    sock.listen(5) 
    while True: 
        client, address = sock.accept() 
        print "a client connected" 
        if client not in clients: 
            clients.append(client) 
            recvMsg = RecvMsg(client)
            recvMsg.start() 
    sock.close() 

if __name__ == "__main__": 
    port = sys.argv[1]
    main( port ) 
  

python server.py 56565




  

=> client.py

#!/usr/bin/python
# -*- coding:utf-8 -*-
import socket  
import threading 
import os,time 
import sys

class RecvMsg(threading.Thread): 
    def __init__(self, sock): 
        threading.Thread.__init__(self) 
        self.sock = sock 

    def run(self): 
        while True: 
            recvMsg = self.sock.recv(512) 
            print "recv=>",recvMsg 

def sendMsg(sock): 
    msg = time.time()
    message = {} 
    message["id"] = os.getpid() 
    message["msg"] = msg 
    print "send=>", message 
    sock.send(str(message)) 

def main( port ): 
    sock = socket.socket() 
    sock.connect(( socket.gethostname(), int(port) )) 
    recvMsg = RecvMsg(sock) 
    recvMsg.start() 
    while True:
        time.sleep(1.5) 
        sendMsg(sock) 

if __name__ == "__main__":
    port = sys.argv[1] 
    main( port ) 
  

python client.py 56565


關于報錯

socket模塊提供4個error函數。

1.關于一般I/O和通信有關的問題 socket.error

2.與查詢地址有關 socket.gaierror

3.與其他地址錯誤有關 socket.herror

4.與上個socket調用timeout有關 socket.timeout

舉個例子:(保存為error.py)
#!/usr/bin/python
# -*- coding:utf-8 -*-
from socket import *
import time,sys

HOST = socket.gethostname()
PORT = sys.argv[0] 
BUFSIZ = 1024
ADDR = ( HOST, int(PORT) )

SerSock = socket(AF_INET, SOCK_STREAM)

try:
    SerSock.bind(ADDR)
except socket.error, e:
    print "socket.error=>",e
except socket.gaierror, e:
    print "socket.gaierror=>",e
except socket.herror, e:
    print "socket.herror=>",e

SerSock.listen(5)

while True:
    print "waiting for message..."
    CliSock, addr = tcpSerSock.accept()
    print "...connect from :", addr
    while True:
        data = CliSock.recv(BUFSIZ)
        if not data:
            break
        CliSock.send("[%s] %s" % (time.ctime(), data))
    CliSock.close()
SerSock.close()
  

python error.py 54545







本文出自 夏日小草,轉載請注明出處: http://homeway.me/2014/10/21/python-socket-1/


-by小草

2014-10-21 22:34:54

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37443.html

相關文章

  • App網絡管理

    摘要:安卓開發一般都需要進行日志管理,常用操作老司機已為你封裝完畢,你可以用這份工具進行管理,具體可以查看源碼,現在為你開車,傳送門。當前沒有網絡連接時返回獲取當前網絡的具體類型上下文當前網絡的具體類型。 ??安卓開發一般都需要進行日志管理,常用操作老司機已為你封裝完畢,你可以用這份工具進行管理,具體可以查看源碼,現在為你開車,Demo傳送門。 站點 系統日志輸出工具類 → AppKeyBo...

    only_do 評論0 收藏0
  • 編程模型(范式)小結

    摘要:參考鏈接面向對象編程模型現在的很多編程語言基本都具有面向對象的思想,比如等等,而面向對象的主要思想對象,類,繼承,封裝,多態比較容易理解,這里就不多多描述了。 前言 在我們的日常日發和學習生活中會常常遇到一些名詞,比如 命令式編程模型,聲明式編程模型,xxx語言是面向對象的等等,這個編程模型到處可見,但是始終搞不清是什么?什么語言又是什么編程模型,當你新接觸一門語言的時候,有些問題是需...

    miya 評論0 收藏0
  • Kubernetes CNI網絡最強對比:Flannel、Calico、Canal和Weave

    摘要:第層網絡的一個值得注意的示例是以太網,其中表示為子層。與其他方案相比,相對容易安裝和配置。與不同,不使用網絡。網絡策略是其最受追捧的功能之一。 本文將在介紹技術原理和相應術語的基礎上,再集中探索與詳細對比目前最流行的CNI插件:Flannel、Calico、Weave和Canal,對比介紹它們的原理、使用方法、適用場景和優缺點等。 showImg(https://segmentfaul...

    scq000 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<