首页 > 编程语言 >基于Python的socket套接字的简单使用

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

时间:2022-09-28 17:25:55浏览次数:47  
标签:socket Python ip client 接字 data 服务端 客户端

  • 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()
    

标签:socket,Python,ip,client,接字,data,服务端,客户端
From: https://www.cnblogs.com/jdy0927/p/16738813.html

相关文章

  • 使用Python的Win32api接口实现后台的键鼠模拟的消息模拟
    importtimeimportwin32apiimportwin32conimportwin32guiclassVirtual_Keyboard(object):def__init__(self,hwnd):self.hwnd=hwnds......
  • Python第四章实例、实战
    实例01  实例02  实例03  实例04  实例05    实例06    实例07    实例08    实例09    实例10......
  • python 内置数据类型与方法
    序列类型包括列表、元组和范围(range)以及字符串,序列类型的对象有一些共同的操作,如操作符运算、切片操作等。1.list类型与操作1.1玩转索引列表(list)类型的对象可以通过li......
  • python操作excel
    库:xlwtfromdatetimeimportdatetimeimportloggingimportjsonimportxlwtimportosclassExportReleaseNote():def__init__(self):self.date=datetime.no......
  • Python学习:property装饰器
    1.property装饰器:装饰器是在不修改被装饰对象源代码以及调用方式的前提下为被装饰对象添加新功能的可调用对象property是一个装饰器,是用来绑定给对象的方法伪造成一个数......
  • Python描述符的两种类型
    Python描述符的两种类型1、分类数据描述符:实现了__get__和__set__两种方法的描述符非数据描述符:只实现了__get__一种方法的描述符2、实例# 数据描述符class ......
  • python之内置的@property装饰器
    博主写的很详细https://www.cnblogs.com/hls-code/p/14821055.html?ivk_sa=1024320u 一、@property的介绍与使用python的@property是python的一种装饰器,是用来修饰方......
  • socket套接字
    转载:https://www.bilibili.com/video/BV1bB4y1q77g/?from=search&seid=3197531014935084938&spm_id_from=333.337.0.0&vd_source=46d50b5d646b50dcb2a208d3946b1598......
  • asdf 安装 python 与 nodejs
    asdf安装python与nodejs系统centos7.9安装asdf官方地址:asdf-vm/asdf:ExtendableversionmanagerwithsupportforRuby,Node.js,Elixir,Erlang&more(gi......
  • 力扣349(java&python)-两个数组的交集(简单)
    题目:给定两个数组 nums1 和 nums2,返回它们的交集 。输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。 示例1:输入:nums1=[1,2,2,1],num......