免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1157 | 回复: 0
打印 上一主题 下一主题

Echo-Server Ver1.0 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-28 14:51 |只看该作者 |倒序浏览

from socket import *
from signal import *
import time

def sigint_handler(signum, frame):
global is_sigint_up
is_sigint_up = True
print 'interrupt signal is up, server is cleaning up...'

signal(SIGINT, sigint_handler)
is_sigint_up = False

identify = lambda addr: '%s:%d' % (addr[0], addr[1])
local_id = identify
peer_id = identify
curr_time = lambda struct_time: '(%d-%d-%d %d:%d:%d)' % \
         (struct_time[0], \
          struct_time[1], \
          struct_time[2], \
          struct_time[3], \
          struct_time[4], \
          struct_time[5])
host = '127.0.0.1'
port = 8000
serv_addr = (host, port)
backlog = 5
buff_size = 8192
listen_sock = socket(AF_INET, SOCK_STREAM)
listen_sock.bind(serv_addr)
listen_sock.listen(backlog)
print 'echo-server is running at (%s)' % local_id(serv_addr)
conn_sock = None
peer_addr = ''

try:
while not is_sigint_up:
  conn_sock, peer_addr = listen_sock.accept()
  print 'request from %s   ...accepted' % peer_id(peer_addr)
  print 'session with %s   ...started' % peer_id(peer_addr)
  print
  
  while True:
   recv_data = conn_sock.recv(buff_size) # except socket.error
   if not recv_data: break   # for tcp, receiving none data on blocking socket
                             # means that peer has closed.
   print peer_id(peer_addr), curr_time(time.localtime())
   print ' ', recv_data
   print
   
   conn_sock.sendall(recv_data) # except socket.error
   print local_id(serv_addr), curr_time(time.localtime())
   print ' ', recv_data
   print
   
  conn_sock.close()
  print 'session with %s ending   ...finished' % peer_id(peer_addr)
  
except error, (sock_error_no, sock_error_msg):
conn_sock.close()
print sock_error_msg + '!'
print 'session with %s broken...' % peer_id(peer_addr)
print 'serve closed connect-socket!'
print

except KeyboardInterrupt:  # KeyboardInterrupt has no-effect!
                           # KeyboardInterrupt is concerned to I/O.
pass

finally:
listen_sock.close()
print 'echo-server has quited smoothly!'

raw_input('hit to quit')

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/35936/showart_288107.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP