python socket
jopen
10年前
半双工通信,即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()