【python】网络通信socket

一、什么是socket

socket网络通信是一种基于TCP/IP协议的通信方式,通过套接字(Socket)实现不同主机间的通信。它基于客户端-服务器架构,客户端和服务器通过Socket进行连接、通信和数据交换。在网络中,进程之间如何通信是一个基本问题。网络中的进程可以通过“IP地址、协议、端口”这三元组来唯一标识,从而建立通信。具体来说,应用层与传输层之间的接口正是套接字(Socket),它是一组接口,在设计模式中可以被视为门面模式,将复杂的TCP/IP协议族隐藏在简单的接口背后。这种设计使得程序员能够通过简单的接口调用,而不是直接与复杂的网络协议打交道。Socket网络通信主要有两种类型:流格式套接字(SOCK_STREAM)和数据报格式套接字(SOCK_DGRAM)。流格式套接字使用TCP协议,提供可靠的、双向的通信数据流,确保数据准确无误地到达另一台计算机。而数据报格式套接字则使用UDP协议,强调快速传输而非传输顺序,适用于对实时性要求高、可以容忍部分数据丢失的场景

二、socket特点

  • 基于TCP/IP协议:Python的socket库支持TCP和UDP协议,其中TCP是一种可靠的面向连接的协议,而UDP是一种无连接的协议。

  • 跨平台性:Python的socket库可以在多种操作系统上运行,如Windows、Linux、macOS等。

  • 简单易用:Python的socket库提供了简洁的API,使得开发者能够快速地实现网络通信功能。

  • 阻塞式和非阻塞式:Python的socket库可以创建阻塞式和非阻塞式的套接字。阻塞式套接字在执行send()和recv()操作时会阻塞程序,直到操作完成;非阻塞式套接字则不会阻塞程序,需要使用select模块来处理多个套接字。

  • 安全性:虽然Python的socket库本身不提供加密功能,但可以通过其他库(如ssl)来实现安全的通信。

  • 可扩展性:Python的socket库可以与其他库(如asyncio、twisted等)结合使用,以实现更复杂的网络通信功能。

三、客户端与服务器通信

客户端连接程序

import socket  # 导入socket库,用于网络编程# 定义一个客户端连接函数
def test_client():# 建立与服务器的连接s = socket.socket()  # 创建一个socket对象,默认使用TCP协议s.connect(('192.168.3.100', 4455))  # 连接到指定的IP地址和端口号# 传输数据(收发数据包)content = "hello  i am clinet"  # 要发送的数据内容s.send(content.encode('gbk'))  # 将字符串编码为GBK格式并发送# 关闭连接s.close()  # 关闭socket连接# 调用test_client()函数进行测试
# test_client()

服务端程序 

import socketdef test_server():# 创建一个socket对象s = socket.socket()# 绑定服务器端口和端口号s.bind(('192.168.3.100', 4455))# 开始监听端口,等待客户端连接s.listen()# 无限循环,以便持续接收客户端的连接请求while True:# 接受客户端的连接请求,返回一个新的socket对象和客户端地址channel, client = s.accept()# 从新的socket对象中接收数据,最多接收1024字节message = channel.recv(1024)# 将接收到的数据解码为字符串并打印print(message.decode())# 调用test_server函数启动服务器
test_server()

四、实现完整交互 

价值一个亿的稚能代码

服务器端

import socket# 创建一个socket对象
s = socket.socket()# 绑定IP地址和端口号,只允许本设备访问
s.bind(('127.0.0.1', 6666))# 绑定IP地址和端口号,所有IP地址均可以访问6666端口
s.bind(('0.0.0.0', 6666))# 开始监听连接请求
s.listen()# 接受客户端连接,注意:这里只能接受一个客户端连接,无法同时处理多个客户端
chane1, client = s.accept()# 无限循环,等待并处理客户端发送的消息
while True:# 再次接受客户端连接,此时accept()会进入阻塞状态,等待新的客户端连接chane1, client = s.accept()# 接收客户端发送的消息,并将其解码为字符串receive = chane1.recv(1024).decode()# 打印收到的消息print(f"收到消息: {receive}")# 将收到的消息中的"吗?"替换为"!"reply = receive.replace("吗?", "!")# 将回复消息编码为字节流并发送给客户端chane1.send(reply.encode())# 关闭socket连接
s.close()

客户端

import socket  # 导入socket库,用于网络通信
s = socket.socket()  # 创建一个socket对象
s.connect(('127.0.0.1', 6666))  # 连接到本地IP地址(127.0.0.1)的6666端口
while True:  # 无限循环,保持与服务器的通信messge = input("请输入消息:")  # 从用户输入获取消息s.send(messge.encode())  # 将消息编码为字节流并发送给服务器receive = s.recv(1024)  # 接收服务器返回的数据,最大接收1024字节print(f"服务器回复:{receive.decode()}")  # 打印服务器回复的消息,解码为字符串

每篇一言:结果需要的是一个开始。没开始说什么都是废话。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/47337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

防火墙之双机热备篇

为什么要在防火墙上配置双机热备技术呢? 相信大家都知道,为了提高可靠性,避免单点故障 肯定有聪明的小伙伴会想到那为什么不直接多配置两台防火墙,然后再将他们进行线路冗余,不就完成备份了吗? 答案是不…

JDK、JRE、JVM的区别java的基本数据类型

说一说JDK、JRE、JVM的区别在哪? JDK: Java Delopment kit是java工具包,包含了编译器javac,调试器(jdb)以及其他用于开发和调试java程序的工具。JDK是开发人员在开发java应用程序时候所需要的的基本工具。…

海外社媒矩阵为何会被关联?如何IP隔离?

在当今的数字时代,社交媒体已经成为人们日常生活中不可或缺的一部分。通过社交媒体,人们可以与朋友互动,分享生活,甚至进行业务推广和营销。然而,社交媒体账号关联问题逐渐受到广泛关注。社交媒体账号为何会关联&#…

问题清除指南|成功解决pipmatplotlib因为ConnectTimeoutError更新失败问题

前言:跑baseline需要升级matplotlib和pip,在此记录一个错误和一个「别致」的解决方案。 北京时间 14:00 左右,在终端环境中运行命令python -m pip install --upgrade pip,报错: 多次尝试,未果。 隔天上午 0…

Elasticsearch 企业级实战 01:Painless 脚本如何调试?

在企业级应用中,Elasticsearch 常常被用来处理复杂的数据查询和操作。 Painless 是 Elasticsearch 的内置脚本语言,虽然强大,但调试起来并不容易。 本文将详细介绍如何在实战中有效调试 Painless 脚本,以提高开发和运维效率。 本文…

2.javaWeb_请求和响应的处理(Request,Response)

2.请求和响应的处理 文章目录 2.请求和响应的处理一、动态资源和静态资源javax.servlet(包) 二、Servlet体系1.简介2.HttpServlet3.Servlet生命周期 三、Request对象1.ServletRequest1)ServletRequest主要功能有:2)ServletRequest类的常用方法: 2.HttpServletReques…

通过SchedulingConfigurer 接口完成动态定时任务

通过SchedulingConfigurer 接口完成动态定时任务 一.背景 在Spring中,除了使用Scheduled注解外,还可以通过实现SchedulingConfigurer接口来创建定时任务。它们之间的主要区别在于灵活性和动态性。Scheduled注解适用于固定周期的任务,一旦任…

生成式 AI 的未来,对话系统 (Chat)与自主代理 (Agent)相辅相成

目录 1. 概念解释生成式 AI对话系统 (Chat)自主代理 (Agent) 2. 代码示例对话系统示例 (使用 Python 和 NLTK 库)自主代理示例 (使用 Python 模拟简单的自主学习) 3. 逻辑性分析4. 通俗易懂的解释5. 与其他相似概念的对比6. 常见问题和解答7. 技术挑战与解决方案对话系统的技术…

内容安全(深度行为检测技术、IPS、AV、入侵检测方法)

1、深度行为检测技术 深度行为检测技术:是一种基于深度学习和机器学习的技术,它通过分析用户在网络中的行为模式,识别异常或潜在威胁行为,从而保护网络安全和内容安全 分类: 深度包检测技术(Deep Packet…

Kafka Producer发送消息流程之消息异步发送和同步发送

文章目录 1. 异步发送2. 同步发送 1. 异步发送 Kafka默认就是异步发送,在Main线程中的多条消息,没有严格的先后顺序,Sender发送后就继续下一条,异步接受结果。 public class KafkaProducerCallbackTest {public static void mai…

Unity Apple Vision Pro 开发(四):体积相机 Volume Camera

文章目录 📕教程说明📕教程内容概括📕体积相机作用📕创建体积相机📕添加体积相机配置文件📕体积相机配置文件参数📕体积相机的边界盒大小📕体积相机边界盒大小和应用边界盒大小的区别…

【GraphRAG】微软 graphrag 效果实测

GraphRAG 本文将基于以下来源,对Microsoft GraphRAG分析优缺点、以及示例实测分析。 1. Source 代码仓库: Welcome to GraphRAGhttps://microsoft.github.io/graphrag/ 微软文章1(2024.2.13):GraphRAG: Unlocking…

Hadoop3:MR程序的数据倾斜问题处理

一、数据倾斜 什么是数据倾斜? 学过Redis集群的都知道数据倾斜这个问题。 就是大量数据,分配不均匀的现象。 二、MR数据倾斜 1、怎么判断出现数据倾斜? 数据频率倾斜——某一个区域的数据量要远远大于其他区域。 数据大小倾斜——部分记…

Android中OkHttp3中超时时间概述

目录 前言connectTimeoutreadTimeoutwriteTimeoutcallTimeoutpingInterval拓展 前言 可以看到,使用还是很简单的。主要相关的有这五个参数,其中我们常用到是就是connectTimeout、readTimeout和writeTimeout。 再看上图,可以看到默认下connec…

js | Core

http://dmitrysoshnikov.com/ecmascript/javascript-the-core/ Object 是什么? 属性[[prototype]]对象。 例如,下面的,son是对象,foo不是对象。打印出来的son,能看到有一个prototype 对象。 prototype vs _proto_ v…

R语言实现神经网络ANN

# 常用激活函数 # 自定义Sigmoid函数 sigmod <- function(x){return(1/(1exp(-x))) } # 绘制Sigmoid曲线 x <- seq(-10,10,length.out 100) plot(x,sigmod(x),type l,col blue,lwd 2,xlab NA,ylab NA,main Sigmoid函数曲线)# 自定义Tanh函数 tanh <- function(…

题解:小S与机房里的电脑 Computer_C++算法竞赛_贪心_二分答案_模拟_数据结构

文章目录 小S与机房里的电脑 Computer传统题题目描述输入格式输出格式样例样例输入 1样例输出 1样例输入 2样例输出 2 提示解题思路AC CodeEnd 小S与机房里的电脑 Computer 传统题 时间限制: 1000ms内存限制: 256MiB 题目描述 最近小S想带他的学生打组队娱乐赛&#xff0c;…

Qt QProcess 进程间通信读写数据通信

本文介绍了如何使用Qt的QProcess 进行程序开发&#xff0c;包括启动进程间通信、设置环境变量、通用方法&#xff1b;方便在日常开发中使用&#xff1b; 1.使用Qt进行程序开发&#xff0c;可以通过QProcess类用于启动外部程序并与其进行通信.&#xff1b; 进程A&#xff08;…

Vite的WebSocket

Vite的webSocket SocketJava Socket概述工作原理优势劣势 Java WebSocket概述工作原理代码示例nodeJS WebSocket优势劣势 vite中的WebSocket&#x1f4ab;代码示例使用vite进行创建服务器并对Vue实行HMR 总结 Socket Java 中的 Socket 与 WebSocket 都用于网络通信&#xff0c…

微服务设计原则——高性能:锁

文章目录 1.锁的问题2.无锁2.1 串行无锁2.2 无锁数据结构 3.减少锁竞争参考文献 1.锁的问题 高性能系统中使用锁&#xff0c;往往带来的坏处要大于好处。 并发编程中&#xff0c;锁带解决了安全问题&#xff0c;同时也带来了性能问题&#xff0c;因为锁让并发处理变成了串行操…