首页 > 代码库 > python socket

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

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


python socket