标签:style color io os ar for sp 数据 div
半双工通信,即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()
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()
标签:style color io os ar for sp 数据 div
原文地址:http://my.oschina.net/u/2252538/blog/337177