python socket网络编程
python socket网络编程
服务器端
-
socket初始化
socket(family,type[,protocal]) 使用给定的地址族、套接字类型、协议编号(默认为0)来创建套接字
一些常用参数socket类型 描述 socket.AF_INET ipv4地址 socket.AF_INET6 ipv6地址 socket.SOCK_STREAM 流式socket,用于TCP socket.SOCK_DGRAM 数据包式socket,用于UDP 初始化socket: socket(socket.AF_INET,socket.SOCK_STREAM) (创建一个基于TCP的socket套接字) -
socket函数
注意点:1)TCP发送数据时,已建立好TCP连接,所以不需要指定地址。UDP是面向无连接的,每次发送要指定是发给谁。
2)服务端与客户端不能直接发送列表,元组,字典。需要字符串化repr(data)
一些常用socket函数 作用 服务器端 bind(address) 将套接字绑定到地址, 在AF_INET下,以元组(host,port)的形式表示地址 listen(backlog) 开始监听TCP传入连接。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了 accept() 接受TCP连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址 客户端 connect(address) 连接到address处的套接字。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误 公用 getpeername() 返回连接套接字的远程地址。返回值通常是元组(ipaddr,port) getsockname() 返回套接字自己的地址。通常是一个元组(ipaddr,port) setblocking(flag) 设定是否阻塞,0代表否,1代表是 recv(bufsize[,flag]) 接受TCP套接字的数据。数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略 send(string[,flag]) 发送TCP数据。将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小 sendall(string[,flag]) 完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常 close() 关闭套接字 -
socket编程思路
- 服务器端
- 初始化socket #s.socket(socket.AF_INET,socket.SOCK_STREAM)
- 绑定本地ip和端口到socket #s.bind((ip,port))
- 开始监听连接 #s.listen(5)
- 进入循环,不断接受客户端的连接请求 #s.accept()
- 接受客户端的数据并发送数据给客户端 #s.recv(), s.sendall()
- 关闭连接 #s.close()
- 客户端
- 初始化socket
- 连接远端套接字 #s.connect()
- 连接后发送和接受数据
- 关闭套接字
- 服务器端