您的位置:首页 > 编程语言 > Python开发

【python学习】socket编程

2016-04-11 15:57 639 查看
网络编程的一个基本组件就是套接字(socket)
一个套接字就是一个socket模块中的socket类的实例,他的实例化需要3个参数:
第一个参数是地址族(默认是socket.AF_INET,前缀AF_表示地址族(address family))
第二个参数是流(socket.SOCK_STREAM,默认值) 或者 数据报(socket.SOCK_DGRAM)套接字
第三个参数是协议,默认是0(一般可不提供)
# 导入socket库:
import socket
# 创建Socket时,AF_INET指定使用IPv4协议,IPv6就指定为AF_INET6。SOCK_STREAM指定使用面向流的TCP协议
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接:注意参数是一个tuple,包含地址和端口号。
s.connect(('www.baidu.com', 80))
socket有两个方法:send和recvs.send('GET / HTTP/1.1\r\nHost: www.sina.com.cn\r\nConnection: close\r\n\r\n')s.recv:用一个所需(最大)字节数做参数调用recv来接收数据,一般建议1024一个简单服务器端的例子
import socket

s = socket.socket()
host = socket.gethostname()  #获取本机
port = 2233

s.bind((host, port))
s.listen(5)     #调用listen()方法开始监听端口,传入的参数指定等待连接的最大数量:
print 'Waiting for connection...'

while True:
#服务器通过循环来接受连接,accept()会等待并返回一个客户端的连接,类型是tuple:
c,addr = s.accept()

print 'Get connection from  %s:%s' % addr
c.send('Thank you for connecting')
c.close()
##升级版
##使用面向对象的思维,一个基于SocketServer类的服务器

from SocketServer import TCPServer,StreamRequestHandler

class Handler(StreamRequestHandler):
def handle(self):
addr = self.request.getpeername()
print 'Get connection from: %s %s' % addr
self.wfile.write('Thank you for connection')

#''空字符表示程序运行的本机
server = TCPServer(('',2345),Handler)
server.serve_forever()
一个客户端的例子
import socket

s = socket.socket()
host = socket.gethostname()
port = 2233

s.connect((host, port))
print s.recv(2233)

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  address Socket python