Python中的套接字编程

article/2025/10/20 20:47:10

在这里插入图片描述

文章目录

  • **连接到服务器:**
    • **一个简单的服务器客户端程序:**
      • **服务器**
      • **客户端**

套接字编程是一种连接网络上的两个节点以相互通信的方法。一个套接字(节点)侦听 IP 处的特定端口,而另一个套接字则伸向另一个套接字以形成连接。服务器形成侦听器套接字,而客户端则连接到服务器。
他们是网页浏览背后的真正支柱。简单来说,有一个服务器和一个客户端。
套接字编程是通过导入套接字库并创建一个简单的套接字来开始的。

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

在这里,我们制作了一个套接字实例,并向它传递了两个参数。第一个参数为AF_INET,第二个参数为SOCK_STREAM。AF_INET是指地址系列 ipv4。SOCK_STREAM表示面向连接的 TCP 协议。
现在,我们可以使用此套接字连接到服务器。

连接到服务器:

请注意,如果在创建套接字期间发生任何错误,则为套接字。错误被抛出,我们只能通过知道其IP连接到服务器。您可以使用以下命令查找服务器的IP:

$ ping www.google.com

你也可以使用python找到IP:

import socket ip = socket.gethostbyname('www.google.com')
print(ip)

输出结果:

image.png

下面是用于连接到 Google 的脚本示例。


import socket
import systry:s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)print("已成功创建套接字")
except socket.error as err:print("套接字创建失败,出现错误 %s" % (err))# 套接字默认端口
port = 80try:host_ip = socket.gethostbyname('www.google.com')
except socket.gaierror:print("解析主机时出错")sys.exit()# 连接到服务器s.connect((host_ip, port))print("套接字已成功连接到google")

运行结果:

image.png

  • 首先,我们做了一个插座。
  • 然后我们解决了谷歌的IP,最后,我们连接到谷歌。
  • 现在我们需要知道如何通过套接字发送一些数据。
  • 对于发送数据,套接字库具有 sendall 函数。此函数允许您将数据发送到套接字连接到的服务器,并且服务器还可以使用此函数将数据发送到客户端。

一个简单的服务器客户端程序:

服务器

服务器有一个 bind() 方法,该方法将其绑定到特定的 IP 和端口,以便它可以侦听该 IP 和端口上的传入请求。服务器有一个 listen() 方法,它将服务器置于侦听模式。这允许服务器侦听传入连接。最后,服务器有一个 accept() 和 close() 方法。accept 方法启动与客户端的连接,close 方法关闭与客户端的连接。

# 首先导入套接字库
import socket# 接下来创建套接字对象
s = socket.socket()
print ("已成功创建套接字")# 在您的计算机上保留一个端口在我们的情况下是12345,但可以是任何端口
port = 12345#接下来绑定到端口,我们没有在ip字段中键入任何ip,而是输入了一个空字符串,这使服务器侦听来自网络上其他计算机的请求
s.bind(('', port))
print ("套接字绑定到 %s" %(port))# 切换套接字到监听模式
s.listen(5)
print ("套接字正在侦听")# 一个永远的循环,直到我们中断它或发生错误
while True:# 与客户端建立连接。c, addr = s.accept()print ('已从获得连接', addr )# 向客户发送感谢信息。编码以发送字节类型。c.send('感谢您的连接'.encode())# 关闭与客户端的连接c.close()# 打破循环break
  • 首先,我们导入套接字是必要的。
  • 然后我们制作了一个套接字对象,并在我们的PC上保留了一个端口。
  • 之后,我们将服务器绑定到指定的端口。传递空字符串意味着服务器也可以侦听来自其他计算机的传入连接。如果我们通过127.0.0.1,那么它将只侦听在本地计算机中进行的那些调用。
  • 5 在这里,我们将服务器置于侦听模式,这意味着如果服务器繁忙,则 5 个连接将一直等待,如果第 6 个套接字尝试连接,则连接将被拒绝。
  • 最后,我们进行一段时间循环,并开始接受所有传入连接,并在向所有连接的套接字发送感谢消息后关闭这些连接。

客户端

现在我们需要一些服务器可以与之交互的东西。我们可以像这样信奉服务器,只是为了知道我们的服务器正在工作。在终端中键入以下命令:


# 启动服务器
$ python server.py# 保持上述端子打开
# 现在打开另一个终端并键入:$ telnet localhost 12345

如果报以下错误:
image.png

可以在控制面板中点击启用或关闭windows功能中找到telent 客户端 并勾选 点击确定

image.png

image.png

输出:

# #在服务器中。py端子您将看到以下输出:
已成功创建套接字
套接字绑定到 12345
套接字正在侦听
Got connection from ('127.0.0.1', 52617)
# 在telnet终端中,您将看到:
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
感谢您的连接.

此输出显示我们的服务器正在工作。
现在对于客户端:

# 导入socket 模块
import socket# 船舰socket 对象
s = socket.socket()# 定义要连接的端口
port = 12345# 连接到本地计算机上的服务器
s.connect(('127.0.0.1', port))# 从服务器接收数据并解码以获取字符串。
print(s.recv(1024).decode())
# 关闭连接
s.close()
  • 首先,我们制作一个套接字对象。
  • 然后,我们在端口12345(运行服务器的端口)上连接到localhost,最后,我们从服务器接收数据并关闭连接。
  • 现在将此文件另存为 client.py,并在启动服务器脚本后从终端运行它。

运行结果:

1.gif


http://chatgpt.dhexx.cn/article/VAEO8gSX.shtml

相关文章

流式套接字基本概念

目录 流式套接字基本概念创建套接字绑定本地地址连接请求监听函数接收请求套接字IO操作关闭套接字 编程实现 所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利…

Windows下套接字

一、套接字 windows套接字Socket是进程通信的一种方式,可以实现在不同主机的相关进程之间交换数据。在TCP/IP网络应用中,通信的两个进程的主要模式是客户/服务器(C/S)模式,即客户向服务器发出请求,服务器接受到请求后&#xf…

深入理解Socket套接字原理

Socket套接字原理 1、什么是Socket 在计算机领域,套接字Socket作为计算机之间进行通信的固定的约定方式之一存在。这种太抽象了,我举个例子,我们要是用笔记本电脑前需要先对电脑供电,那供电就有两种方式电线插座供电和电池供电&…

原始套接字

一、原始套接字概述 协议栈的原始套接字从实现上可以分为“链路层原始套接字”和“网络层原始套接字”两大类。 链路层原始套接字可以直接用于接收和发送链路层的MAC帧,在发送时需要由调用者自行构造和封装MAC首部。而网络层原始套接字可以直接用于接收和发送IP层…

socket套接字

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 socket套接字 1. 什么是socket套接字2. socket编程3. 网络字节序4. IP地址转换函数5. sockaddr数据结构…

java 套接字是什么_套接字是什么,套接字通信及其原理

为通信的端点,每个套接字由一个 IP 地址和一个端口号组成。通过网络通信的每对进程需要使用一对套接字,即每个进程各有一个。 通常,套接字采用客户机-服务器架构。服务器通过监听指定端口,来等待客户请求。服务器在收到请求后,接受来自客户套接字的连接,从而完成连接。 实…

网络编程——原始套接字实现原理

目录 1. 基础知识 1.1、概述 1.2、链路层原始套接字 1.3、网络层原始套接字 2、原始套接字的实现 2.1 原始套接字报文收发流程 2.2链路层原始套接字的实现 2.2.1 套接字创建 2.2.2 报文接收 2.2.3 报文发送 2.2.4 其它 2.3 网络层原始套接字的实现 2.3.1 套接字…

UDP套接字编程

参考:《UNIX 网络编程 卷1 : 套接字联网API》 UDP 与 TCP 之间传输存在差异,也导致编写应用程序存在很多差异。UDP 客户端和服务器不建立连接,而是直接使用 sendto 函数给服务器发送数据报。但必须指定目的地的地址作为参数。服务器也不用接…

网络套接字编程

网络套接字编程 一、 认识UDP协议 UDP(User Datagram Protocol 用户数据报协议,是不可靠的数据报传输协议,不确保数据安全有序的到达对端。 特点: 传输层协议无连接不可靠传输面向数据报 应用场景:性能要求大于安全要求&…

彻底弄懂套接字

1.什么是套接字(英文名:插座) 套接字(socket)是一种通信机制,凭借这种机制,客户/服务器系统的开发工作既可以在本地单机上进行,也可以跨网络进行。Linux所提供的功能(如打…

什么是套接字?Socket基本介绍

什么是套接字?Socket基本介绍 一、什么是套接字?二、套接字特性三、套接字缓冲区 一、什么是套接字? 套接字是一种通信机制(通信的两方的一种约定),socket屏蔽了各个协议的通信细节,提供了tcp/…

微信小程序-引入地图、获得经纬度

实际这是一个获得经纬度的方法,但是有了经纬度可以做很多事情 点击按钮跳转到一个单独的页面(地图,可导航)在页面内嵌一个独立的小区域 首先可看一下腾讯地图官方文档 微信小程序JavaScript SDK | 腾讯位置服务 最基本&#xf…

微信小程序-批量地图标记

效果图 wxml <loading hidden"{{!loading}}">加载中</loading><view class"mapBox"><map id"myMap" scale"12" longitude"{{longitude}}" latitude"{{latitude}}" markers"{{mark…

实现地图功能 利用微信内置的微信地图

效果图&#xff1a; 查看微信开发文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.chooseLocation.html 其实不难&#xff0c;查看官方文档&#xff0c;一目了然 直接上代码&#xff1a; map.wxml: <button bindtap"mapViewTap&…

微信小程序应用百度地图API

微信小程序&#xff0c;定位地点&#xff0c;应用bdmap API 1 申请 百度地图开放平台页面&#xff1a;控制台&#xff0c;添加应用 应用类型选微信小程序&#xff0c;添加微信小程序名称和APP ID 2. 微信小程序后台设置 进入微信公众平台&#xff0c;开发管理 服务器域名&a…

微信接入js-sdk-获取地理位置,打开微信内置地图

1.第一步当然是已经正确接入了微信并且配置好了回调安全域名。不会的朋友可以看看《微信开发-初级接入微信公众平台MP》 2. 引用微信js-sdk, http://res.wx.qq.com/open/js/jweixin-1.0.0.js&#xff0c;然后通过config接口注入权限验证配置。先在自己的服务器上写个获取数据…

微信地图 leaflet 腾讯地图

本来在微信项目中使用的高德地图&#xff0c;发现不是想象中的好用&#xff0c;而且用了微信&#xff0c;感觉使用腾讯地图会比较方便&#xff0c;所以&#xff0c;索性使用leaflet腾讯地图的底图来实现。 其中关于正确使用腾讯地图参考了https://github.com/wuxiashuangji/TX…

微信地图组件小程序报错“permission“

报错原因 地图可以任意添加&#xff0c;但用户的位置属于个人隐私&#xff0c;因此需要添加服务引导程序&#xff0c;告知用户地理位置的获取。需要添加 Permission &#xff08;小程序权限获取设置&#xff09;。 解决方法 该片段用于获取位置权限&#xff0c;注意该片段如…

uniapp 微信对接地图的三种操作

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 1.uni.getLocation 获取当前经维度 先上代码 let that this// 获取用户是否开启 授权获取当前的地理位置、速度的权限。uni.getSetting({success (res) {console.log(res)// 如果没有授权if (!res.au…

微信地图多边形算法及判断点位是否在多边形中

最新一个小项目,需要用到地图定义自由区域,并判断选点是否落在此区域内,思路是通过map的polygons中的points来定义多边形边界,通过polygons的fillColor 、 strokeColor、strokeWidth来进行选区颜色的渲染。 然后再通过地图中心点位的移动来确定需要判断的选点(因为小程序地…