python可以利用socket库实现套接字编程。套接字编程通常分为server端和client端,编程时一般是先server再client,这是最正常的逻辑,因为功能是由server提供的,client必须根据server提供的规则来建立连接和发送消息。
server端的函数:
函数 | 描述 | |
s.bind(address) | 将套接字绑定到地址, 在AF_INET下,以元组(host,port)的形式表示地址. | |
s.listen(backlog) | 开始监听TCP传入连接。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。 | |
s.accept() | 接受TCP连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。 | |
服务器建立TCP连接的流程如下:
socket()创建套接字->
bind()绑定地址和端口->
listen()开始监听连接请求->
accept()接受连接请求,并返回一个新的套接字用于处理后续操作->
recv()和send()对数据进行收发->
新套接字和旧套接字依次close()->end
代码练习:
import socket from time import ctime HOST = "" PORT = 10012 ADDR = (HOST,PORT) BUFSIZE = 1024 s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(ADDR) s.listen(5) while True: print "Waiting for connection..." conn,addr = s.accept() print "...connection from:",addr while True: data = conn.recv(BUFSIZE) if not data: break conn.send(‘[%s] %s‘%(ctime(),data)) print [ctime()],‘:‘,data conn.close() s.close()
客户端函数:
函数 | 描述 |
s.connect(address) | 连接到address处的套接字。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。 |
s.connect_ex(adddress) | 功能与connect(address)相同,但是成功返回0,失败返回errno的值。 |
客户端建立TCP连接的流程:
socket()创建套接字->
connection()请求建立连接->
recv()和send()对数据进行收发->
close()套接字断开连接->end
注意,客户端在建立连接后没有返回新的套接字
代码练习:
import socket from time import ctime HOST = ‘localhost‘ PORT = 10012 BUFSIZE = 1024 ADDR = (HOST,PORT) tcpSock =socket.socket(socket.AF_INET,socket.SOCK_STREAM) tcpSock.connect(ADDR) while True: data = raw_input(">") if not data: break tcpSock.send(data) data = tcpSock.recv(BUFSIZE) if not data: break print data tcpSock.close()
演示截图如下
客户端输入:
服务器端:
本文出自 “绵之学习笔记” 博客,请务必保留此出处http://chenmg.blog.51cto.com/3039876/1622025
原文地址:http://chenmg.blog.51cto.com/3039876/1622025