基于Python的socket套接字的简单使用

  • socket:进行应用程序之间的网络信息交互的工具
  • 几乎市面上所有具有网络通讯功能的软件,底层都使用了socket
  • 两个进程,分别开启sokcet服务,使用scoket可以在进程间进行通讯.
  • 有了sokcet一样要获取三要素:ip 端口号 协议, 才能进行正常通讯

socket的使用流程

分为服务端和客服端

  • 服务端

    • 创建服务端socket
    # 1.导包导入socket模块
      import socket
    
    # 2.创建socket对象
    # socket.AF_INET 这个参数代表ipv4,下边绑定的IP地址就是ipv4协议的
    # socket.SOCK_STREAM 这个参数代表使用的是TCP协议,要使用tcp协议收发数据
      server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      
    # 设置端口号复用
    # server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    
    • 绑定ip和端口号,让客户端可以访问
    # 3.绑定ip和端口号
    # ip地址中 127.0.0.1代表本地回环地址, 就是主机本身的ip地址
    # 无论你的主机ip是什么,我们都可以使用127.0.0.1找到你的主机
    # 绑定的端口号是 8888
      server_socket.bind(('127.0.0.1',8888))
    
    • 设置监听,等待客户端接入
    # 4.设置监听
    # 128代表最大监听数量,也就是同时接入服务的客户端最多有128个
      server_socket.listen(128)
    
    • 如果有客户端接入,则创建新的socket对象,与之进行数据通讯
    # 5.等待用户接入服务端,创建新的socket对象
    # 使用accept方法后会等待客户端接入后才能继续执行. 阻塞:暂时无法执行等待某个事件发生后才能继续执行
    # 客户端接入后,会返回一个元组,元组中有两个元素,第一个是新的sokcet对象,第二个是ip和端口号
      service_client_socket, ip_port = server_socket.accept()
    
    • 收发数据
    # 使用死循环保持服务端一直开启
    while True:
    # 6.接收数据
    # 获取数据的字节数
    # 字符型数据 = 字节型数据 + 字符集
      recv_data = service_client_socket.recv(1024)
      # 当接收到客服端发来结束会话时跳出循环
      if recv_data.decode() == '结束':
          print('会话结束')
          break
      else:
          print('客服端: '+recv_data.decode())
    
      # 7.发送数据 发送时只能发送二进制数据
      send_data = input('服务端:')
      service_client_socket.send(send_data.encode())
    
    
    
    • 关闭socket
    # 8.关闭socket
     service_client_socket.close()
     server_socket.close()
    
  • 客户端

    • 创建客户端socket
    # 1.导包导入socket模块
      import socket
      
    # 创建客服端socket
      client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    • 连接服务端
    # 连接服务器和端口
      client_socket.connect(('127.0.0.1', 8888))
    
    • 与服务端新建的socket进行通讯收发数据
    # 使用循环进行多次会话
    while True:
      # 发送数据
      send_data = input('客服端:')
      client_socket.send(send_data.encode())
      # 跳出会话
      if send_data == '结束':
          print('会话结束')
          break
    
      # 接收服务端的响应
      recv_data = client_socket.recv(1024)
      print('客服端:'+recv_data.decode())
    
    
    • 使用结束后关闭socket
    # 关闭socket
      client_socket.close()
    
posted @   一个*故事  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示