python的socket入門到高級

SOCKET入門:

wKioL1gYmsjC74WpAAGrbGjhMio078.png-wh_50

原理:服務端一直處理監聽的狀態,當客戶端發起一個請求,服務端監聽到請求建立連接,在建立連接時,若當前客戶端沒有結束,處於阻塞狀態,當前的會話處於不斷的交互狀態,只有當前客戶端結束回話後,才進行下個回話請求,若此時有另外一個連接,不會分配當前的服務端正在使用連接分配給後來的客戶端繪畫

通俗說理解SOCKET過程:小磊子和10086

    一天小磊子打電話給10086,10086的小紅接到小磊子的電話,這時候小磊子就開始發牢騷問,我這個月的電話費怎麼那麼多(此時就是SOCKET建立會話連接通信過程),小紅聽到小磊子的牢騷後,開始在後臺查詢小磊子這個月的電話記錄情況,然後小紅把查到的數據告訴小磊子(此時是客戶端:請求數據-請求處理--迴應數據),你這個月凌晨跟某某女生.....此時浩哥也打電話給10086,要找小紅,此時小紅在接客狀態,在給小磊子幹活,無法接通(客戶端阻塞連接),浩哥不開心,因爲他想查下這個月他老婆最近夜裏跟誰在打電話....就隨便找了小麗爲浩哥服務(此時是SOCKET的併發過程)......當小磊子掛掉電話後,此時與小紅斷開連接(結束連接),小紅才能繼續接客....繼續等待下一個人到來....

Socket服務端編程主要包括下面幾步:

1、打開socket

2、綁定到一個地址和端口

3、偵聽進來的連接

4、接受連接

5、讀取數據

客戶端過程:

1、打開一個socket

2、連接一個地址和端口

3、讀寫數據

####網絡通信,有TCP/IP還有其他...

socket type:

socket.AF_UNIX:只能夠用於單一的unix系統進程間通信

socket.AF_INET:服務器之間網絡通信

socket.AF_NET6IPV6

###簡單例子

SERVER:

import socket

host=''

port=1122

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.bind((host,port))

s.listen(1)

conn,addr=s.accept()

print "connected by",addr

while True:

    data=conn.recv(1024)

    if not data:break

    conn.sendall(data)

conn.close()

###CLIENT:

import socket

host='127.0.0.1'

port=1122

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.connect((host,port))

s.sendall('hello,world')

data=s.recv(1024)

s.close()

print 'received',repr(data)

--SOCKET多線程

wKiom1gYrn6xoEZYAAJX-IJqj74046.png-wh_50

多線程的原理圖:可以理解成成10086的多個客服,在SOCKET裏 有個連接池。

#!/usr/bin/env python

import SocketServer

class MyTcpHandler(SocketServer.BaseRequestHandler):

    def handle(self):

        print "Got  a new conn from ",self.client_address

        while True:

            data=self.request.recv(1024).strip()

            print "recv:",data

            self.request.send(data.upper())

if __name__=="__main__":

    host,port="localhost",8888

    s=SocketServer.ThreadingTCPServer((host,port),MyTcpHandler)

    s.server_forver()

###CLIENT不變。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章