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()
演示截图如下
客户端输入:
服务器端:
转载于:https://blog.51cto.com/chenmg/1622025