Python學習筆記——Python開發中的網絡操作

Python支持socket進行編程,其API跟C中的大同小異。

TCP方式編程支持server/client方式

一、TCP方式

server 端

server端的socket一般流程是這樣:
1 建立一個socket(可以選擇socket類型INET,UNIX等,以及連接方式TCP/UDP)
2 <span style="font-family: Arial, Helvetica, sans-serif;">使用bind公開一個端口,使得client可以方便連接
3 設置一個listen隊列的大小
4 進入一個無限循環,在此無限循環中,使用accept函數來等待客戶連接,此函數返回一個新的socket, 對應於客戶端的socket,建立通信信道。對socket的處理一般放在外部單獨的函數中(併發)
5 通過send()/recv()來對socket進行讀寫操作</span>

client端

1 建立一個新的socket
2 使用connect函數與遠程主機獲得連接
3 在此socket上進行I/O操作

服務器端基本代碼如下:

def tcpServer():
    srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM)
    srvsock.bind(('', 9527))
    srvsock.listen(5)

    while True:
        clisock, (remoteHost, remotePort) = srvsock.accept()
        print "[%s:%s] connected" % (remoteHost, remotePort)
        #do something on the clisock
        clisock.close()


if __name__ == "__main__":
    tcpServer()

客戶端基本代碼如下:

def tcpClient():
    clisock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    clisock.connect(('localhost', 9527))
    
    #I/O on this clisock
    #clisock.send("")
    #dat = clisock.recv(len)
    
    print dat
    
if __name__ == "__main__":
    tcpClient()

二、UDP方式


Server端

1 建立數據報形式的socket
2 公開一個端口,一邊客戶端連接
3 開始接收數據
客戶端

1 新建一個數據報socket
2 收發數據
Server端基本代碼

def udpServer():
    address = ('', 9527)
    srvsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    srvsock.bind(address)
    #data,addr = srvsock.recvfrom(2048)

if __name__ == "__main__":
    udpServer()

客戶端基本代碼

def udpClient():
    address = ('localhost', 9527)
    clisock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    #clisock.sendto(data, address)
    
if __name__ == "__main__":
    udpClient()


三、總結


  1. TCP與UDP的差異就是在創建socket的時候,一個採用SOCK_STREAM,一個採用SOCK_DGRAM
  2. TCP的server方式比UDP的server方式多一行代碼listen
  3. send與sendto,recv與recvfrom的區別,與c語言相同。



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