python網路編程

來源:互聯網
上載者:User

標籤:網路   伺服器   python   網路編程   socket   

通訊端


(每本書都有不同的說法,這裡選用百度詞條給出的理解):源IP地址和目的IP地址以及源連接埠號碼和目的連接埠號碼的組合稱為通訊端。其用於標識用戶端請求的伺服器和服務。通訊端有兩種分別是基於檔案型(Unix通訊端,其“家族名”為AF_UNIX)的和基於網路型的(其“家族名”為AF_INET)。

python只支援AF_UNIX,AF_INET,AF_NETLINK(一種Linux通訊端)。


最常用的通訊端對象方法






通訊端的類型


通訊端的類型只有兩種:連線導向的通訊端和不需連線的通訊端。


連線導向的通訊端


即在通訊前一定要建立一條串連,它提供了一種順序可靠不會重複的資料轉送,實現這種串連的主要協議就是傳輸控制通訊協定(即TCP),要建立這種通訊端需要指定通訊端類型為SOCK_STREAM,由於這類通訊端使用網際協議(IP)來尋找網路中的主機,所以一般會用TCO/IP組合來描述。


建立TCP用戶端

from socket import *from time import ctime#設定主機名稱與連接埠HOST=" "PORT=21567#設定緩衝區大小BUFSIZ=1024ADDR=(HOST,PORT)#建立伺服器通訊端tcpSerSock=socket(AF_INET,SOCK_STREAM)#把地址綁定到通訊端上面tcpSerSock.bind(ADDR)#最多允許5個串連tcpSerSock.listen(10)#伺服器無限迴圈while True:    print ("waiting for connection......")#接收用戶端串連,accept()函數使阻塞式的    tcpCliSock, addr=tcpSerSock.accept()    print('......connected from:',addr)#通訊迴圈    while True:                   data=tcpCliSock.recv(BUFSIZ)#對話,接收           if not data:               break           data=data.decode()                      tcpCliSock.send(('[%s]%s'%(ctime(),data)).encode())    tcpCliSock.close()tcpSerSock.close()
關於通訊端的decode() ,encode()問題,參見http://blog.csdn.net/chuanchuan608/article/details/17915959


建立TCP用戶端

from socket import *#建立一個TCP用戶端,程式會提示使用者輸入要傳給伺服器的資訊#顯示伺服器返回的加了時間戳記的結果HOST=' 'PORT=21567BUFSIZ=1024ADDR=(HOST,PORT)#建立用戶端通訊端tcpCliSock=socket(AF_INET,SOCK_STREAM)#嘗試串連伺服器tcpCliSock.connect(ADDR)#與伺服器對話while True:    data=input('>')        if not data:#使用者沒有輸入時退出            break        tcpCliSock.send(data)    data=tcpCliSock.rec(BUFSIZ)        if not data:#伺服器由於某種原因退出時導致接受失敗而退出            break    print (data)tcpCliSock.close()

            不需連線的通訊端


這意味著無需串連就可以通訊,但是資料到達的順序和可靠性便無法保證,實現這種串連的主要協議就是使用者資料包通訊協定(即UDP),要建立UDP就得在建立的時候指定SOCK_DGRAM,同上,一般會有UDP/IP組合名來描述。


建立一個UDP伺服器

from socket import*from time import ctimeHOST=' 'PORT=21567BUFSIZE=1024ADDR=(HOST,PORT)udpSerSock=socket(AF_INET,SOCK_DGRAM)udpSerSock.bind(ADDR)while True:print ("waiting for message......")data,addr=udpSerSock.recvfrom(BUFSIZE)udpSerSock.sendto(('[%s] %s'%(ctime(), data)).encode(),addr)print ('......received from and returned to:',addr)udpSerSock.close()


        建立一個UDP用戶端

from socket import *#不需要和伺服器建立連結直接把訊息發出去然後等待伺服器的回複。HOST='<span style="font-family:arial,宋體,sans-serif;"> </span>'PORT=21567BUFSIZE=1024ADDR=(HOST,PORT)udpCliSock=socket(AF_INET,SOCK_DGRAM)while True:    data=input('> ')    if not data:        break    data=data.encode()    udpCliSock.sendto(data,ADDR)    data,ADDR=udpCliSock.recvfrom(BUFSIZE)    if not data:        break    print (data)udpCliSock.close()








著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

python網路編程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.