python socket

jopen 10年前發布 | 23K 次閱讀 Python Python開發

半雙工通信,即Half-duplex Communication。這種通信方式可以實現雙向的通信,但不能在兩個方向上同時進行,必須輪流交替地進行。也就是說,通信信道的每一段都可以是發送端,也可以是接收端。但同一時刻里,信息只能有一個傳輸方向。如日常生活中的例子有步話機通信等。半雙工傳輸的協作是稱為線路規程的過程的一部分,它是 OSI模型的第二層,數據鏈路層所包含的一項功能。

   創建一個半雙工的聊天程序。當創建一個連接,服務啟動的時候,只有一方可以打字輸入信息,另一個方只有在等到有消息通知他輸入消息時,才

能說話。一旦消息發送出去后,要等到有回復了才能發送下一條消息。一方是服務端,另一方是客戶端。

  用Python寫Server端的代碼:

 #!/usr/bin/env python
from  socket import  *
from  time import  ctime

地址

HOST = '172.17.20.10'

端口

PORT = 8000 BUFSIZ = 1024 ADDR = (HOST,PORT) tcpSerSock = socket(AF_INET, SOCK_STREAM) tcpSerSock.bind(ADDR) tcpSerSock.listen( 5 ) try :

 while  True :
 print  'waiting for connection:'
 tcpCliSock,addr = tcpSerSock.accept();
 print  '...... connected from :' , addr
 try :

     while  True :

     data =  tcpCliSock.recv(BUFSIZ)

     if  not  data:
         continue
     else  :
         print  ' C TO S[%s] %s'  %  (ctime(), data)
         serdata =  raw_input ( '> ' )
         while  True  :
             if  not  serdata :
                 continue

             else  :
                 tcpCliSock.send( 'S To C [%s] %s'  %  (ctime(), serdata))

                 print  "waiting.."

                 break
 finally :
     tcpCliSock.close()

finally : tcpSerSock.close() </pre>

         

 Client端源代碼:

 #!/usr/bin/env python

from socket import *

地址

HOST = '172.17.20.10'

端口

PORT = 8000 BUFSIZ = 1024 ADDR = (HOST, PORT) tcpCliSock = socket(AF_INET, SOCK_STREAM) tcpCliSock.connect(ADDR) try : while True :

 data =  raw_input ( '> ' )

 print  "waiting..."

 if  not  data:

     break

 tcpCliSock.send(data)

 data =  tcpCliSock.recv(BUFSIZ)

 if  not  data:

     break

 print  data


finally : tcpCliSock.close() </pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!