python socket编程

Posted being-a-tester

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python socket编程相关的知识,希望对你有一定的参考价值。

udp协议:

  • 发送时不会先建立连接,广播式的,可以一对一或一对多,传送数据并不安全,不能保证数据能够到达
  • 使用udp协议的socket流程:
    • 创建套接字
    • 发送/接收数据
    • 关闭套接字

      import socket
      #创建套接字
      udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
      #发送数据
      udp_socket.sendto(‘要发送的数据‘.encode(),(‘127.0.0.1‘,7890))
      #接收数据
      recv_data = udp_socket.recvfrom(1024) #这里会返回一个元组,有两个数据,第一个是返回的消息,第二个是数据来源的ip和端口
      data = recv_data[0].decode()
      addr = recv_data[1]
      print(data,addr)
      #关闭套接字
      udp_socket.close()

  • 建立udp服务端时,需要绑定端口

    import socket
    #创建套接字
    udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    #绑定端口
    udp_socket.bind(‘‘,7890)
    #接收数据
    recv_data = udp_socket.recvfrom(1024)
    data = recv_data[0].decode()
    addr = recv_data[1]
    print(data,addr)
    #发送数据
    udp_socket.sendto(‘要发送的数据‘.encode(),addr)
    #关闭套接字
    udp_socket.close()
    ##tcp协议:

  • 发送时必须先建立连接,是一对一的,所以数据传输一般是安全可靠的,有严格的客户端和服务端之分
  • 客户端流程
    • 创建套接字
    • 与服务端建立连接
    • 发送/接收数据
    • 关闭连接

      import socket
      #创建套接字
      client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
      #与服务端连接
      client_socket.connect((‘127.0.0.1‘,7890))
      #发送数据
      client_socket.send(‘这是发送的数据‘.encode())
      #接收数据
      recv_data = client_socket.recv(1024).decode()
      print(recv_data)
      #关闭套接字
      client_socket.close()

  • 服务端流程
    • 创建套接字
    • 绑定端口
    • 开启监听
    • 等待客户端连接
    • 使用新的套接字与客户端连接
    • 接收/发送数据
    • 关闭新的连接,结束与该客户端的连接
    • 关闭服务端连接

      import socket
      server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
      server_socket.bind((‘‘,7890))
      server_socket.listen(10)
      new_socket,client_addr = server_socket.accept() #这里返回一个新的socket对象和客户端的地址
      recv_data = new_socket.recv(1024).decode()
      print(recv_data)
      new_socket.send(‘服务端发送的信息‘.encode())
      new_socket.close()
      server_socket.close()

为了连接多个客户端,可将等待连接及之后的代码放入循环内:

while True:
    new_socket,client_addr = server_socket.accept() #这里返回一个新的socket对象和客户端的地址
    recv_data = new_socket.recv(1024).decode()
    print(recv_data)
    new_socket.send(‘服务端发送的信息‘.encode())
    new_socket.close()

当关闭socket后,连接所占用的资源不会立即释放,此时再开启服务端可能会出现端口被占用的情况,此时可以设置端口复用

server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True) #在绑定之前设置



















































以上是关于python socket编程的主要内容,如果未能解决你的问题,请参考以下文章

Python(socket编程——2)

python中的socket编程

Python Socket编程

python socket编程

python socket编程

python socket编程