Python学习之client and server篇一:python 实现简单client与server

**************************************转载说明*********************************************

本文转载自http://blog.csdn.net/qianguozheng/article/details/8497052

********************************************************************************************


  1. socket.getaddrinfo(host,  port, family=0, socktype=0, proto=0, flags=0)  
  2. #根据给定的参数host/port,相应的转换成一个包含用于创建socket对象的五元组,  
  3. #参数host为域名,以字符串形式给出代表一个IPV4/IPV6地址或者None.  
  4. #参数port如果字符串形式就代表一个服务名,比如“http”"ftp""email"等,或者为数字,或者为None  
  5. #参数family为地主族,可以为AF_INET  ,AF_INET6 ,AF_UNIX.  
  6. #参数socketype可以为SOCK_STREAM(TCP)或者SOCK_DGRAM(UDP)  
  7. #参数proto通常为0可以直接忽略  
  8. #参数flags为AI_*的组合,比如AI_NUMERICHOST,它会影响函数的返回值  
  9. #附注:给参数host,port传递None时建立在C基础,通过传递NULL。  
  10. #该函数返回一个五元组(family, socktype, proto, canonname, sockaddr),同时第五个参数sockaddr也是一个二元组(address, port)  
  11. # Echo server program  
  12. import socket  
  13. import sys  
  14.   
  15. HOST = None               # Symbolic name meaning all available interfaces  
  16. PORT = 8888              # Arbitrary non-privileged port  
  17. s = None  
  18. for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC,  
  19.                               socket.SOCK_STREAM, 0, socket.AI_PASSIVE):  
  20.     af, socktype, proto, canonname, sa = res  
  21.     try:  
  22.         #根据getaddrinfo()的返回信息初始化socket  
  23.         s = socket.socket(af, socktype, proto)  
  24.     except socket.error, err_msg:  
  25.         print err_msg #回显异常信息  
  26.         s = None  
  27.         continue  
  28.     try:  
  29.         #sa是(host,port)的二元组  
  30.         s.bind(sa)  
  31.         #监听客户端请求  
  32.         s.listen(1)  
  33.     except socket.error, err_msg:  
  34.         print err_msg  
  35.         s.close()  
  36.         s = None  
  37.         continue  
  38.     break  
  39. if s is None:  
  40.     print 'could not open socket'  
  41.     sys.exit(1)  
  42.       
  43. conn, addr = s.accept()  
  44. print 'Connected by', addr  
  45.   
  46. while 1:  
  47.     data = conn.recv(1024)# 2)接受数据  
  48.     if not data: break  
  49.     conn.send(data)# 3)并返回2中接受到得数据  
  50. conn.close()  
  51.   
  52.   
  53.   
  54. # Echo client program  
  55. import socket  
  56. import sys  
  57.   
  58. HOST = '127.0.0.1'    # The remote host  
  59. PORT = 8888              # The same port as used by the server  
  60. s = None  
  61. for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM):  
  62.     af, socktype, proto, canonname, sa = res  
  63.     try:  
  64.         s = socket.socket(af, socktype, proto)  
  65.     except socket.error, msg:  
  66.         s = None  
  67.         continue  
  68.     try:  
  69.         s.connect(sa)  
  70.     except socket.error, msg:  
  71.         s.close()  
  72.         s = None  
  73.         continue  
  74.     break  
  75. if s is None:  
  76.     print 'could not open socket'  
  77.     sys.exit(1)  
  78.       
  79. s.sendall('Hello, world')# 1)发送数据  
  80. data = s.recv(1024)# 4)接受服务器回显的数据  
  81. s.close()  
  82. print 'Received', repr(data) #打印输出 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值