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()
        
        
        

  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() 

  两份代码都用try...finally语句,主要是为保证程序异常,也能够关闭网络连接。这是用python简单实现半双工的聊天工具.

     

posted @ 2012-08-21 10:02  火與劍  阅读(1413)  评论(0编辑  收藏  举报