python socket
半雙工通信,即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 pythonfrom 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>