Chinaunix首页 | 论坛 | 博客
  • 博客访问: 192695
  • 博文数量: 29
  • 博客积分: 731
  • 博客等级: 上士
  • 技术积分: 435
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-06 16:18
文章分类

全部博文(29)

文章存档

2012年(29)

分类: Python/Ruby

2012-04-24 00:54:34

 

第二章: 网络客户端

建立socket(TCP client):

import socket

print "Creating socket ......"
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print "done"

print "looking up port number ......"
port = socket.getservbyname('http', 'tcp')
print "done"


print "Connect to remote host on port %d ......" % port
s.connect(('', port))
print "done"

print "Connected from", s.getsockname()
print "Connected to", s.getpeername()


s.sendall('/' + "\r\n") //
获取当前根目录下文件列表

s.shutdown(1) //数据调用shutdown函数才能确保发送

while 1:
buf = s.recv(2048)
if not len(buf): break
sys.stdout.write(buf)

建立socket对象时,需要告诉系统通信类型(IPv4 or IPv6)和协议家族(TCP or UDP)

AF_INET代表IPv4

SOCK_STREAM代表TCP SOCK_DGRAM代表UDP

getservbyname(服务名,协议)函数可以自动查询服务对应端口

getsockname()函数返回本地的IP和端口号

getpeername()函数返回远程机器的IP和端口号

 

 

第三章 网络服务器

TCP Server:

import sys

import socket

 

host = ''              //bind to all interface

port = 51423

 

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

// SOL_SOCKET  使用socket选项

// SO_REUSEADD  socket关闭时,本地用户该socket的端口可以重用(保留一段时间该端口)  0代表true(马上释放端口) 1代表false

s.bind((host,port))   

print "Waiting for connections..."

s.listen(1)    //准备接受连接, 参数1代表服务器实际处理请求是允许多少等待连接,一般操作系统不支持大于5

while 1:

    try:

        clientsock, clientaddr = s.accept()    //当有client连接返回

    except KeyboardInterrupt:

        raise

    except:

        traceback.print_exc()

        continue

    # Process the connection

    try:

    print "got connection from", clientsock.getpeername()   

//('127.0.0.1', 39675) clientsock.getpeername()返回client ip, port

    except (KeyboardIntertupt, SystemExit):

        raise

    except:

        traceback.print_exc()

#Close the connection

try:

    clientsock.close()

except KeyboardIntertupt:

    raise

except:

    traceback.print_exc()

 

 

阅读(2176) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~