网络编程之Socket

网络编程之Socket

目录

什么是Socket

TCP服务端流程

TCP客户端流程

UDP服务端流程

UDP客户端流程

什么是Socket

Socket是位于应用层与传输层之间的一个抽象层,可用于不同的网络协议(如TCP、UDP等)它允许应用程序创建一个与网络上的其他主机进行通信的端点

TCP服务端流程

  • 服务端流程

    • 首先服务端先创建并初始化Socket
    # 创建Socket
    Socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
    • 绑定地址和端口:将Socket绑定到本地的IP地址和端口上,这个IP地址就将作为服务器的监听地址
    # 绑定服务器和端口号
    servers_addr = ('127.0.0.1', 8080)
    Socket.bind(servers_addr)
    
    • 监听连接请求:等待客户端的连接请求
    # 监听客户端请求 最大连接数为5
    Socket.listen(5)
    print('服务器启动成功,等待客户端连接...')while True:# 接受数据client_socket, client_addr = Socket.accept()print('与客户端建立连接', client_addr)
    
    • 数据交换:当连接成功后,便可以和客户端互相发送信息并处理
    # 数据交换
    while True:data = Socket.recv(1024)  # 最大1024字节if len(data) < 1:print('关闭服务')break# 接受客户器端传来的数据print(data.decode())# 向客户端发送数据sen = input('')Socket.sendall(sen.encode())
    
    • 关闭连接:当通信结束后可以通过关闭Socket来断开连接,并释放资源
    Socket.close()
    print("已关闭连接")
    

TCP客户端流程

  • 客户端流程

    • 创建并初始化Socket
    # 创建Socket
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    • 连接服务器IP以及端口
    # 服务器地址和端口
    server_address = ('localhost', 8080)
    
    • 连接服务器
    # 连接服务器
    client_socket.connect(server_address)
    print('已连接到服务器:', server_address)
    
    • 连接成功后与服务端交换数据并处理
    while True:# 发送数据message = input('>>>>')client_socket.sendall(message.encode())# 接收响应response = client_socket.recv(1024)print('服务器响应:', response.decode())
    
    • 关闭连接
    client_socket.close()
    

UDP服务端流程

UDP 是无连接的协议,因此不需要像 TCP 那样先建立连接再进行通信

import socket# 创建 Socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定地址和端口
server_address = ('127.0.0.1', 9000)
server_socket.bind(server_address)print('服务器启动成功,等待客户端数据...')while True:# 接收数据data, client_address = server_socket.recvfrom(1024)  # 最大1024字节# 处理接收到的数据print(f'来自客户端 {client_address} 的消息:', data.decode())# 向客户端发送响应response = input('请输入要发送给客户端的消息: ')server_socket.sendto(response.encode(), client_address)# server_socket.close()

UDP客户端流程

import socket# 创建 Socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 服务器地址和端口
server_address = ('127.0.0.1', 9000)while True:# 发送数据message = input("请输入要发送给服务器的消息: ")client_socket.sendto(message.encode(), server_address)# 接收响应response, server_address = client_socket.recvfrom(1024)  # 最大1024字节print('服务器响应:', response.decode())# client_socket.close()

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

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

相关文章

边缘计算AI智能分析网关V4算力分析及应用场景

一、硬件介绍 智能分析网关V4是TSINGSEE青犀视频推出的一款高性能、低功耗的软硬一体AI边缘计算硬件设备&#xff0c;硬件采用BM1684芯片&#xff0c;集成高性能8核ARM A53&#xff0c;主频高达2.3GHz。硬件内置近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、…

适用于 Windows 的 12 个最佳免费磁盘分区管理器软件

分区是与其他部分分开的硬盘驱动器部分。它使您能够将硬盘划分为不同的逻辑部分。分区软件是一种工具&#xff0c;可帮助您执行基本选项&#xff0c;例如创建、调整大小和删除物理磁盘的分区。许多此类程序允许您更改磁盘片的标签以便于识别数据。 适用于 Windows 的 12 个最佳…

【docker】Docker Compose 使用介绍

一、什么是Docker Compose Docker Compose是一个用于定义和运行多个Docker容器的工具。它允许您使用YAML文件来配置应用程序的服务、网络和卷等方面&#xff0c;并通过单个命令即可快速启动和停止整个应用程序的多个容器。 Docker Compose的主要作用如下&#xff1a; 管理多个…

Defi安全--Zunami Protocol攻击事件分析

其它相关内容可见个人主页 1 Zunami攻击事件相关信息 2023.8.13发生在Ethereum上发生的攻击&#xff0c;存在两个攻击交易&#xff0c;具体信息如下&#xff1a; 攻击合约地址&#xff1a;Contract Address 攻击合约 攻击者地址&#xff1a;Zunami Protocol Exploiter 攻击…

Archlinux下自启动rclone mount

路径&#xff1a; /etc/systemd/system/rclonemount.service [Unit] Descriptionrclonemount Requiresnetwork-online.target.wants Afteralist.service[Service] Typesimple ExecStartPre/bin/mkdir -p /media ExecStart/usr/bin/rclone mount \aliyun: /media \--config /ro…

python如何安装numpy

1. 根据python版本下载相应版本的numpy保存至D:\Program Files (x86)\Python\Python37\Scripts\ numpy下载地址 2. winR&#xff0c;输入cmd&#xff0c;打开命令行窗口&#xff0c;定位到python的安装目录 3. 输入python -m pip install numpy或定位到目录&#xff1a;D:\P…

【Linux】Linux系统编程——ls命令

【Linux】Linux 系统编程——ls 命令 1.命令概述 ls 命令是 Linux 和其他类 Unix 操作系统中最常用的命令之一。ls 命令是英文单词 list 的缩写&#xff0c;正如 list 的意思&#xff0c;ls 命令用于列出文件系统中的文件和目录。使用此命令&#xff0c;用户可以查看目录中的…

代码随想录 516. 最长回文子序列

题目 给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺序的情况下&#xff0c;删除某些字符或者不删除任何字符形成的一个序列。 示例 1&#xff1a; 输入&#xff1a;s “bbbab” 输出&…

Java复习

填空题 课程推荐的 jdk 下载网址为 jdk.java.net 使用命令行编译程序&#xff1a;javac -d bin stc*.java 使用命令行运行程序&#xff1a; java -cp bin 类名 java 语言标识符&#xff1a;字母、数字、下划线和美元符号&#xff0c;数字不能做首字母 java 语言中标识符区…

【QT实战】使用QT5制作一个简易串口助手详细教程,支持打包转发

文章目录 制作串口助手工程所涉及到的头文件ui布局制作串口配置选项添加修饰制作串口打印信息界面添加背景图片 函数查找串口并且添加到ui界面上显示串口数据接收槽函数串口发送槽函数打开串口槽函数 将串口助手封装成可执行文件 本项目的开发环境&#xff1a;windowsQT5qtcrea…

从vue小白到高手,从一个内容管理网站开始实战开发第八天,登录功能后台功能设计--业务逻辑层基础接口和基础服务实现

上一篇我们介绍了项目后续要使用到的工具类,关于工具类的创建可以查看 从vue小白到高手,从一个内容管理网站开始实战开发第七天,登录功能后台功能设计--通用分页、枚举以及相关工具类-CSDN博客文章浏览阅读2次。本次内容主要介绍了项目后续用到的部分工具类,这些工具类,在…

ES索引原理

ES在检索时底层使用的就是倒排索引&#xff0c;正向索引是通过key找value&#xff0c;反向索引则是通过value找key。 索引会分为两个区域&#xff1a;索引区和元数据区。数据是这样存储在里面的&#xff1a; 简单理解就是&#xff1a;当要录入一条数据时&#xff0c;首先会将完…

【国产之光】开年尝鲜——优秀的AI编码助手 Fitten Code

文章目录 前言1. 工具准备1.0 事先说明1.1 VSCode1.2 Fitten Code1.3 GitHub Copilot 2. 使用测评2.1 需求理解2.2 上下文理解 3. 总结推荐链接 开年尝鲜高质量国产AI编码助手——FittenCode 前言 2024年刚刚开局&#xff0c;清华大学 与 非十科技 就发布了全新的 VSCode AI…

并发编程(十)

带有Scheduled的基本都是定时器 Executor框架的成员 &#xff08;1&#xff09;ThreadPoolExecutor ThreadPoolExecutor通常使用工厂类Executors来创建。Executors可以创建3种类型的ThreadPoolExecutor&#xff1a;SingleThreadExecutor、FixedThreadPool和CachedThreadPool…

2024软件测试该如何发展?测试员怎样在内卷中走出来?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、行业现状 目前…

2024.1.22

今天主要是写了一个项目——通讯录&#xff0c;然后做了一下学校的C语言的期末复习题&#xff0c;已经开始准备C的期末了。通讯录目前是我写过最长的代码&#xff0c;但其实实现不是最复杂的&#xff0c;是因为我为了让用户友好&#xff0c;所以说加了一些很多重复的代码&#…

MySQL 8.0中新增的功能(九)

FROM_UNIXTIME()、UNIX_TIMESTAMP()和CONVERT_TZ()的64位支持 根据MySQL 8.0.28版本的更新&#xff0c;FROM_UNIXTIME()、UNIX_TIMESTAMP() 和 CONVERT_TZ() 函数现在在支持64位的平台上处理64位值。这包括64位版本的Linux、MacOS和Windows。在兼容的平台上&#xff0c;UNIX_T…

Java并发Condition 详解

1.引言 在Java并发编程中&#xff0c;线程间的协作是一个核心话题。为了实现线程间的协作&#xff0c;Java提供了多种机制&#xff0c;其中等待/通知机制是最常见的一种。在早期版本中&#xff0c;我们通过Object类提供的wait、notify和notifyAll方法来实现这种机制。然而&…

前端规范扩展

前端编程规范是基于原有vue2基础上那套《编码风格及标准》上&#xff0c;应用于vue3、typescript、vite2基础上延伸出来的扩展补充&#xff0c;持续完善 一、编码规范 ESLint 代码检测工具 Pretter 代码格式化工具配合双校验代码 Git 规范 - 编码工具 vscode 同步参考文档中…

kylin集群使用nginx反向代理

前文已经提到&#xff0c;我安装了kylin集群。 kylin3集群问题和思考&#xff08;单机转集群&#xff09;-CSDN博客文章浏览阅读151次&#xff0c;点赞3次&#xff0c;收藏6次。由于是同一个集群的&#xff0c;元数据没有变化&#xff0c;所以&#xff0c;直接将原本的kylin使用…