半雙工通訊,即half-duplex communication。這種通訊方式可以實現雙向的通訊,但不能在兩個方向上同時進行,必須輪流交替地進行。也就是說,通訊通道的每一段都可以是傳送端,也可以是接收端。但同一時刻裡,資訊只能有乙個傳輸方向。如日常生活中的例子有步話機通訊等。半雙工傳輸的協作是稱為線路規程的過程的一部分,它是osi模型的第二層,資料鏈路層所包含的一項功能。
建立乙個半雙工的聊天程式。當建立乙個連線,服務啟動的時候,只有一方可以打字輸入資訊,另乙個方只有在等到有訊息通知他輸入訊息時,才
能說話。一旦訊息傳送出去後,要等到有回覆了才能傳送下一條訊息。一方是服務端,另一方是客戶端。
用python寫server端的**:
#!/usr/bin/env pythonfrom 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()
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()
兩份**都用try...finally語句,主要是為保證程式異常,也能夠關閉網路連線。這是用python簡單實現半雙工的聊天工具.
全雙工半雙工
單工 單工就是指a只能發訊號,而b只能接收訊號,通訊是單向的,就象燈塔之於航船 燈塔發出光訊號而航船只能接收訊號以確保自己行駛在正確的航線上。半雙工 指乙個時間段內只有乙個動作發生,舉個簡單例子,一天窄窄的馬路,同時只能有一輛車通過,當目前有兩量車對開,這種情況下就只能一輛先過,等到頭兒後另一輛再開...
python 網路程式設計之TCP半雙工聊天小練習
建立tcp伺服器端 from socket import 匯入相應的模組 host 主機名 post 21567 埠 bufsiz 1024 設定緩衝區大小 addr host post tcpsersock socket af inet sock stream tcpsersock.bind ad...
單工,半雙工,全雙工
1 單工 單工就是指a只能發訊號,而b只能接收訊號,通訊是單向的,就象燈塔之於航船 燈塔發出光訊號而航船只能接收訊號以確保自己行駛在正確的航線上。2 半雙工 half duplex 半雙工就是指a能發訊號給b,b也能發訊號給a,但這兩個過程不能同時進行。最典型的例子就象我們在影視作品中看到的對講機一...