7.1 套接字(socket)
套接字(socket)是计算机之间进行通信的一种技术,它允许不同主机上的进程之间进行数据交换。在Python中,我们可以使用socket模块来创建和使用套接字。
首先,我们需要导入socket模块:
import socket
在网络编程中,有两种主要类型的套接字:流套接字(Stream Sockets)和数据报套接字(Datagram Sockets)。流套接字使用传输控制协议(TCP)进行通信,而数据报套接字使用用户数据报协议(UDP)进行通信。我们将主要关注TCP套接字,因为它们更常用且提供了可靠的双向通信。
创建套接字
要创建一个TCP套接字,我们可以使用socket.socket()函数:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
这里,socket.AF_INET表示我们使用IPv4地址,socket.SOCK_STREAM表示我们使用TCP协议。
绑定套接字
创建套接字后,我们需要将其绑定到一个地址和端口。这可以使用bind()方法完成:
address = ('localhost', 12345)
s.bind(address)
这里,我们绑定了套接字到本地地址('localhost')和端口(12345)。
监听连接
在绑定套接字后,我们需要开始监听客户端的连接。我们可以使用listen()方法来实现这一点:
s.listen(5)
这里的数字5表示允许的最大连接数。
接受连接
当有客户端尝试连接时,我们可以使用accept()方法来接受连接。这将返回一个新的套接字对象和客户端地址:
client_socket, client_address = s.accept()
发送和接收数据
现在我们已经建立了连接,可以使用send()和recv()方法发送和接收数据。例如:
data = client_socket.recv(1024) # 接收最多1024字节的数据
client_socket.send(b'Hello, client!') # 发送数据
请注意,我们需要使用字节类型的数据进行通信。
关闭套接字
通信完成后,我们需要关闭套接字以释放资源。我们可以使用close()方法来实现这一点:
client_socket.close()
s.close()
这就是一个简单的TCP套接字服务器的基本结构。为了让您更好地理解,这里有一个完整的示例:
TCP服务器示例
import socket
def main():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
address = ('localhost', 12345)
s.bind(address)
s.listen(5)
print("Waiting for connections...")
client_socket, client_address = s.accept()
print(f"Connected to {client_address}")
data = client_socket.recv(1024)
print(f"Received: {data}")
client_socket.send(b'Hello, client!')
client_socket.close()
s.close()
if __name__ == '__main__':
main()
这个示例展示了如何创建一个简单的TCP服务器,它接受来自客户端的连接和数据,并向客户端发送一条消息。您可以根据自己的需求修改这个示例,以实现不同的功能。
推荐阅读:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

7.1 套接字(socket)的更多相关文章
- Linux进程间通信(八):流套接字 socket()、bind()、listen()、accept()、connect()、read()、write()、close()
前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程.通常我们使用socket进行网络编 ...
- Linux进程间通信(九):数据报套接字 socket()、bind()、sendto()、recvfrom()、close()
前一篇文章,Linux进程间通信——使用流套接字介绍了一些有关socket(套接字)的一些基本内容,并讲解了流套接字的使用,这篇文章将会给大家讲讲,数据报套接字的使用. 一.简单回顾——什么是数据报套 ...
- 套接字socket 的地址族和类型、工作原理、创建过程
注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料如<linux内核完全剖析>.<linux c 编程一站式学习>等,只是为了更好 ...
- [置顶] Java套接字Socket编程
1)概念 网络编程基本模型就客户端到服务器的模型,也就是我们常见的C/S模型.简单的说就是两个进程间相互通信的过程.即通信双方一方作为服务器等待客户端提出请求并给以回应,另一方作为客户端向服务器提出请 ...
- Java网络编程--套接字Socket
一.套接字Socket IP地址标志Internet上的计算机,端口号标志正在计算机上运行的进程(程序). 端口号被规定为一个16位的0--65535之间的整数,其中,0--1023被预先定义的服务通 ...
- 套接字编程,创建套接字socket
1.套接字地址结构: struct sockaddr { sa_family_t sa_family; char sa_data[14]; }; 其中,成员sa_family表示套接字的协议族类型,对 ...
- 什么是套接字(Socket)
应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进程可能需要 通过同一个TCP协议端口传输数据.为了区别不同的应用程序进程和连 ...
- Java套接字Socket编程--TCP参数
在Java的Socket中,主要包含了以下可设置的TCP参数. 属性 说明 默认值 SO_TIMEOUT 对ServerSocket来说表示等待连接的最长空等待时间; 对Socket来说表示读数据最长 ...
- pythonl练习笔记——PythonNet 套接字socket
1 套接字socket 1.1 套接字概述 套接字,一种网络通讯工具:用于进行网络间的通信,是一种特殊文件类型, 套接字,是一个通信链的句柄,用于描述IP地址和端口,实现向网络发出请求或应答网络请求. ...
- 面向对象之套接字(socket)和黏包
一丶套接字(socket) tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 基于UDP协议的socket server端: import socket udp_sk = socke ...
随机推荐
- 基于 ByteHouse 构建实时数仓实践
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 随着数据的应用场景越来越丰富,企业对数据价值反馈到业务中的时效性要求也越来越高,很早就有人提出过一个概念: 数据的 ...
- 全局唯一ID的实现方案
为什么需要保证唯一ID? 在单机服务架构中,数据库的每一个业务表的主键ID都是允许自增的,但是在分布式服务架构的分库分表的设计,使得多个库或者多个表存储了相同的业务表,如果没有一个全局的唯一ID设计方 ...
- Linux环境下使用jsoncpp
目录 1. 下载jsoncpp 2. 生成静态库libjsoncpp.a 3. 复制相关文件至/usr/local下(方便编程) 4. CMakeList.txt编写(需要新增的) 1. 下载json ...
- Node.js中理解asyncmap函数 ,爬取王者荣耀荣耀官网壁纸400多张
async/mapLimit函数理解 const phantom = require('phantom') const express = require('express'); const app ...
- 移动端网页--better-scroll介绍
移动端网页--better-scroll介绍 Options 起始位置及滚动方向 startX:0 开始时的X轴位置 startY:0 开始时的Y轴位置 scrollY: true 滚动方向为 Y 轴 ...
- [数据库/MySQL]解决异常:Data truncation: Truncated incorrect DOUBLE value: 'dc5'
1 场景复现 MySQL: 5.7.24-27 表结构 (两张独立的表) [表 RRR1] CREATE TABLE `RRR1` ( `R1` float NOT NULL COMMENT 'R1' ...
- 即时通讯系统为什么选择GaussDB(for Redis)?
摘要:如果你需要一款稳定可靠的高性能企业级KV数据库,不妨试试GaussDB(for Redis). 每当网络上爆出热点新闻,混迹于各个社交媒体的小伙伴们全都开启了讨论模式.一条消息的产生是如何在群聊 ...
- 20-优化配置介绍、HMR
webpack性能优化 开发环境性能优化 生产环境性能优化 开发环境性能优化 优化打包构建速度 HMR 优化代码调试 source-map 生产环境性能优化 优化打包构建速度 oneOf babel缓 ...
- 如何遍历HashMap集合?
在Java中,HashMap是一种常用的数据结构,它提供了快速的查找.插入和删除操作.当我们需要遍历HashMap中的所有元素时,可以利用三种不同的方法实现. 方法一:使用键值对遍历 HashMap中 ...
- macOS下安装 n 管理包(node版本管理工具)
1. 安装 n 管理包 终端命令全局安装 npm install -g n 安装成功后在终端输入 n --version 或 n 查看,可看到 n 的默认安装目录 下面就是使用 n 的方式了, 首先查 ...