python socket

jopen 9年前

半双工通信,即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()