服务器端
import socket
sock=socket.socket()
sock.bind(('127.0.0.1',8000))
sock.listen(5)
while True:
server,addr=sock.accept()
data=server.recv(1024)
print(data)
server.sendall('HTTP /1.1 200 OK \r\n\r\n hi_吃饭了吗'.encode())
server.close()
# sock.close()
客户端
import socket
cilent=socket.socket()
cilent.connect(('127.0.0.1',8000))
cilent.sendall(b'hello_world')
data=cilent.recv(1024)
print(data)
cilent.close()
相关方法说明:
名 称 | 描 述 |
---|
服务端 | 服务器套接字方法 |
s.bind(ADDR) | 将地址(主机名、端口号对)绑定到套接字上 |
s.listen([backlog]) | 设置并启动 TCP 监听器,如果指定backlog,则必须至少为0(如果低于0,则设置为0); |
s.accept() | 被动接受 TCP 客户端连接,一直等待直到连接到达(阻塞) |
客户端 | 客户端套接字方法 |
s.connect() | 主动发起 TCP 服务器连接 |
s.connect_ex() | connect()的扩展版本,此时会以错误码的形式返回问题,而不是抛出一个异常 |
普通通用 | 普通的套接字方法 |
s.recv() | 接收 TCP 消息 |
s.recv_into() | 接收 TCP 消息到指定的缓冲区 |
s.send() | 发送 TCP 消息 |
s.sendall() | 完整地发送 TCP 消息 |
s.recvfrom() | 接收 UDP 消息 |
s.recvfrom_into() | 接收 UDP 消息到指定的缓冲区 |
s.sendto() | 发送 UDP 消息 |
s.getpeername() | 连接到套接字(TCP)的远程地址 |
s.getsockname() | 当前套接字的地址 |
s.getsockopt() | 返回给定套接字选项的值 |
s.setsockopt() | 设置给定套接字选项的值 |
s.shutdown() | 关闭连接 |
s.close() | 关闭套接字 |
s.detach() | 在未关闭文件描述符的情况下关闭套接字,返回文件描述符 |
s.ioctl() | 控制套接字的模式(仅支持 Windows) |
阻塞 | 面向阻塞的套接字方法 |
s.setblocking() | 设置套接字的阻塞或非阻塞模式 |
s.settimeout() | 设置阻塞套接字操作的超时时间 |
s.gettimeout() | 获取阻塞套接字操作的超时时间 |
文件方法 | 面向文件的套接字方法 |
s.fileno() | 套接字的文件描述符 |
s.makefile() | 创建与套接字关联的文件对象 |
属性 | 数据属性 |
s.family | 套接字家族 |
s.type | 套接字类型 |
s.proto | 套接字协议 |