套接字工作流程

10.socket网络编程

先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。

Socket Families(地址簇)

socket.AF_UNIX unix本机进程间通信 

socket.AF_INET IPV4 

socket.AF_INET6  IPV6

Socket Types

socket.SOCK_STREAM  #for tcp

socket.SOCK_DGRAM   #for udp

Socket 参数

s.bind(address)     绑定(host,port)

s.listen(backlog)   开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量

s.accept()             接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。

s.connect(address)      address的格式为元组(hostname,port)

s.setblocking(bool)    是否阻塞(默认True),如果设置False,那么accept和recv时一旦无数据,则报错。

s.close()                  关闭套接字

s.recv(bufsize)        bufsize指定最多可以接收的数量

s.send(string)          将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。即:可能未将指定内容全部发送。

s.sendall(string)       将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。

                                 内部通过递归调用send,将所有内容发送出去。

s.settimeout(timeout)  设置套接字操作的超时期,timeout是一个浮点数,单位是秒。值为None表示没有超时期。一般,超时期应该在

                                    刚创建套接字时设置,因为它们可能用于连接的操作(如 client 连接最多等待5s )

s.getpeername()         返回连接套接字的远程地址。返回值通常是元组(ipaddr,port)

 

服务端

  1. 创建socket对象
  2. 绑定IP和端口 绑定 bind()
  3. 开始监听链接 监听 listen()
  4. 阻塞 , 等待客户端成功连接 阻塞 accept()
  5. 接收请求数据 接收 recv()
  6. 处理并发送请求数据 发送 send()
  7. 关闭 close()

客户端

  1. 创建socket对象
  2. 连接服务端 , 按照IP和端口连接 连接 connet()
  3. 发送请求数据 发送 send()
  4. 接收请求数据 接收 recv()
  5. 关闭 close()

简单socket

 server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)   重用ip和端口 ,但其它client只是挂起状态。只有一个能交互

import socket
# 创建socket对象
sock = socket.socket()
# 绑定IP和端口,参数是一个元组(ip,port)
sock.bind(('localhost', 8080))
# 开始监听,最大挂起5个
sock.listen(5)
# 阻塞,等待连接
conn,addr = sock.accept()
# 接收请求数据,接收大小为1024字节
content = conn.recv(1024)
print(content.decode())
# 发送请求结果,必须以bytes类型
conn.send(b'jieshouwanbi')
# 关闭链接
conn.close()
s.server

相关文章:

  • 2021-12-22
  • 2021-08-20
猜你喜欢
  • 2022-01-21
  • 2021-12-04
  • 2021-10-02
  • 2021-06-01
  • 2021-10-05
相关资源
相似解决方案