Python实现基本Socket服务端与客户端通信

2023-10-26

      该文章使用 python 实现基本的 socket 服务端与客户端通信,分步详解与完整代码都有,按需所求即可。

(一)服务端代码:

1. 引入自带的socket模块,并创建一个socket实例,服务端需要使用 bind 将该实例绑定到指定域名与端口下,域名与端口号放在元组中传入

import socket

#创建 socket对象
socket_server=socket.socket()

# 绑定 socket_server到指定的ip地址
socket_server.bind(("localhost",8888))

2. 设置端口监听,listen() 内书写数字,表示可以接受链接的数量

#监听端口
socket_server.listen(1)

3. 使用 accept 方法 等待客户端连接,该方法是个阻塞方法,没有链接则会一直阻塞在此步。连接成功会返回一个元组,元组内分别为 连接对象客户端地址信息

result=socket_server.accept()
conn=result[0]  #客户端连接对象
address=result[1]  #客户端地址信息

4. 使用连接对象的 recv 方法 接收客户端发来的消息,1024表缓冲区大小,可自行设置,并解码为UTF-8 格式

   data = conn.recv(1024).decode("UTF-8")

   print(f"客户端发来的消息是:{data}")

5. 使用连接对象的 send 方法 给客户端发送消息

msg=input("请输入回复的消息:")
conn.send(msg.encode("UTF-8"))

6. 通信结束后分别断开链接

conn.close()
socket_server.close()

完整服务端代码:

import socket

#创建 socket对象
socket_server=socket.socket()

# 绑定 socket_server到指定的ip地址
socket_server.bind(("localhost",8888))

#监听端口, listen()内书写数字,表示可以接受链接的数量
socket_server.listen(1)

#等待客户端连接,接收到的 result是一个二元元组, accept()是一个阻塞的方法,如果没有连接不会往下执行
result=socket_server.accept()
conn=result[0]  #客户端连接对象
address=result[1]  #客户端地址信息

print(f"接收到的客户端连接信息为{address}")

while True:
   #接收客户端信息,recv接受的参数是缓冲区大小,一般1024即可,返回的是一个字节数组,bytes对象,不是字符串,再将其decode解码为字符串对象
   data = conn.recv(1024).decode("UTF-8")

   print(f"客户端发来的消息是:{data}")

   #回复消息
   msg=input("请输入回复的消息:")

   if msg=='exit':
       break

   conn.send(msg.encode("UTF-8"))

#关闭连接
conn.close()
socket_server.close()

(一)客户端代码:

1. 引入自带的socket模块,并创建一个socket实例,然后链接服务端的域名与端口,也是元组作为参数传入

import socket

#创建 socket对象
socket_client=socket.socket()

# 让 socket对象 socket_client 连接到服务端
socket_client.connect(("localhost",8888))

2. 然后就可以使用 send 给服务端发送消息

msg=input("请输入你要发送的消息:")

socket_client.send(msg.encode("UTF-8"))

3. 发送后使用 recv 等待接收服务端回复的消息,同样需要设置缓冲区与解码

   data=socket_client.recv(1024).decode("UTF-8")
   print(f"服务器回复的消息为:{data}")

4. 通信结束后断掉链接

socket_client.close()

完整客户端代码:

import socket

#创建 socket对象
socket_client=socket.socket()

# 让 socket对象 socket_client 连接到服务端
socket_client.connect(("localhost",8888))

while True:
   msg=input("请输入你要发送的消息:")

   if msg=='exit':
      break

   #发送消息
   socket_client.send(msg.encode("UTF-8"))
   #接收消息
   data=socket_client.recv(1024).decode("UTF-8")
   print(f"服务器回复的消息为:{data}")

socket_client.close()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python实现基本Socket服务端与客户端通信 的相关文章

随机推荐

  • HTTPSHandler & SSL Error

    我在服务器ubuntu中 尝试使用pip3 但是出现下面的报错 ImportError cannot import name HTTPSHandler 通过查询资料 发现报错的原因是 该pip3 5中没有安装好openssl 我尝试在pyt
  • python的安装过程

    python的安装 进入官网 点击进入官方链接 点击官方后 进入该页面 可以英译中 点击 Downloads即下载 选择适合自己的系统 windows系统即选择windows 苹果系统即选择macOS 进入下载页面后 选择python的版本
  • 2023面试自动化测试面试题【含答案】

    1 你做了几年的测试 自动化测试 说一下 selenium 的原理是什么 我做了五年的测试 1年的自动化测试 selenium 它是用 http 协议来连接 webdriver 客户端可以使用 Java 或者 Python 各种编程语言来实
  • flask中的Flask、request、render_temple、redirect和url_for

    学flask也有一个多星期了 对这个web框架也有了一点的了解 梳理一些基础的知识点 还是小白一只 代码写得比较low 若文章有错误的地方欢迎大佬随时指正 代码中被注释掉的代码是关于预防csrf 无视即可 主程序脚本 1 from flas
  • 01.Vuepress2.x 创建自己的技术文档站

    目录 一 简介 二 安装 三 配置 四 启动 五 效果图 六 编译 一 简介 Vuepress2 x 英文官网 Vuepress2 x 中文官网 二 安装 参考 步骤1 新建一个文件夹 如 Doc2 0 步骤2 进入文件夹目录 新建 pac
  • Anaconda对python环境管理常用命令

    创建环境 n 为指定环境名称 python 未指定python的版本 conda create n env name python 3 6 删除环境 conda remove n env name all 删除环境的包 conda remo
  • LordOfTheRoot_1.0.1靶机入侵

    LordOfTheRoot 1 0 1靶机入侵 1 环境搭建 下载地址 https www vulnhub com entry lord of the root 101 129 下载后用 VMware 或者 VirtualBox 打开 并配
  • ocr文字识别环境部署

    一 Linux环境下部署1 环境要求操作系统 CenterOS7 主要软件环境 python3 9X64 opencv4 5 5 PaddleOCR2 5 paddlepaddle2 2 1 python运行环境建议3 6 3 91 环境安
  • 初级学习01

    打开cmd的方式 1 管理员方式进行 2 Win R 输入cmd 3 在任意文件夹下面 shift 鼠标右键 4 资源管理器的地址栏前 cmd路径 常用的Dos命令 1 盘符切换 C D F 2 查看当前目录下的所有文件 dir 3 切换目
  • ionic2 打包android包时报'C:\Users\Administrator\AppData\Local\Android\sdk' does not exist.

    写在前面 为了能及时的将自己踩到的前端坑 包括ionic angular ReactNative 小程序 APICloud 分享给大家 以后会逐渐将文章转移到微信公众号 前端e家 front e family 可直接扫码关注 公众号会不定期
  • 解析@EnableWebMvc 、WebMvcConfigurationSupport和WebMvcConfigurationAdapter

    在spring boot spring mvc 的项目中 有些时候我们需要自己配置一些项目的设置 就会涉及到这三个 那么 他们之间有什么关系呢 首先 EnableWebMvc WebMvcConfigurationSupport 使用了 E
  • 设置button的边框颜色和宽度

    UIButton button UIButton buttonWithType UIButtonTypeCustom button frame CGRectMake 100 100 100 100 button layer cornerRa
  • Flutter图片选择 image_picker(官方)插件使用详解

    Flutter图片选择 image picker 官方 插件使用详解 IOS自测 image picker GitHub最新版本查看 https github com flutter plugins 下滑找到image picker可以看到
  • apipost-一键压测

    apipost新功能可实现一键压测 接口压测实践 使用场景 对指定接口进行性能测试 实现方式 为实现高性能的并发需求 使用自研的压测引擎 可以实现一万以上并发 项目已经开源 github地址 https github com Apipost
  • STM32 GPIO: pull up, pull down, no pull

    gpio 有3种状态 上拉 下拉 不拉 首先 确定GPIO口的输入和输出 当GPIO处于output模式 一般选择no pull 引脚能够正确地输出目标值 当GPIO处于input模式 需要根据默认的输入值来确定配置模式 如果默认输入的值为
  • C语言小游戏——推箱子(一次性版本)

    目录 思路 1 游戏的开始和地图设定 2 地图场景设置和人物的四项移动 3 分析人物的移动 4 判断结束条件 思路 l 分析 编写代码实现 控制游戏角色 在地图上 避开障碍物 将箱子推到目标点 游戏元素 角色 控制移动 地图 游戏场所 空地
  • JavaScript 的初识

    JavaScript 是 Web 的编程语言 是一种轻量级的编程语言 是可插入 HTML 页面的编程代码 插入 HTML 页面后 可由所有的现代浏览器执行 且JavaScript 非常容易学 文章目录 一 认识JavaScript 二 Ja
  • Git基本命令使用

    Git基本命令使用 分支操作 显示所有本地分支 git branch 显示所有远程分支 git branch r 新建一个分支 git branch branch name 切换到指定的分支 git checkout b branch na
  • Spring框架——IOC和AOP以及DI

    一 IOC原理 1 控制反转 IOC 将创建管理对象的工作交给容器来做 在容器初始化 或在某个时间节点 通过反射机制创建好对象 在使用时直接从容器中获取 控制反转 将对象的控制权反过来交给容器管理 依赖注入 DI 将对象依赖写入配置文件 在
  • Python实现基本Socket服务端与客户端通信

    该文章使用 python 实现基本的 socket 服务端与客户端通信 分步详解与完整代码都有 按需所求即可 一 服务端代码 1 引入自带的socket模块 并创建一个socket实例 服务端需要使用 bind 将该实例绑定到指定域名与端口