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编程思路
原文:https://www.cnblogs.com/starkly/p/14727656.html