套接字(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)的更多相关文章

  1. Linux进程间通信(八):流套接字 socket()、bind()、listen()、accept()、connect()、read()、write()、close()

    前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程.通常我们使用socket进行网络编 ...

  2. Linux进程间通信(九):数据报套接字 socket()、bind()、sendto()、recvfrom()、close()

    前一篇文章,Linux进程间通信——使用流套接字介绍了一些有关socket(套接字)的一些基本内容,并讲解了流套接字的使用,这篇文章将会给大家讲讲,数据报套接字的使用. 一.简单回顾——什么是数据报套 ...

  3. 套接字socket 的地址族和类型、工作原理、创建过程

    注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料如<linux内核完全剖析>.<linux c 编程一站式学习>等,只是为了更好 ...

  4. [置顶] Java套接字Socket编程

    1)概念 网络编程基本模型就客户端到服务器的模型,也就是我们常见的C/S模型.简单的说就是两个进程间相互通信的过程.即通信双方一方作为服务器等待客户端提出请求并给以回应,另一方作为客户端向服务器提出请 ...

  5. Java网络编程--套接字Socket

    一.套接字Socket IP地址标志Internet上的计算机,端口号标志正在计算机上运行的进程(程序). 端口号被规定为一个16位的0--65535之间的整数,其中,0--1023被预先定义的服务通 ...

  6. 套接字编程,创建套接字socket

    1.套接字地址结构: struct sockaddr { sa_family_t sa_family; char sa_data[14]; }; 其中,成员sa_family表示套接字的协议族类型,对 ...

  7. 什么是套接字(Socket)

    应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进程可能需要 通过同一个TCP协议端口传输数据.为了区别不同的应用程序进程和连 ...

  8. Java套接字Socket编程--TCP参数

    在Java的Socket中,主要包含了以下可设置的TCP参数. 属性 说明 默认值 SO_TIMEOUT 对ServerSocket来说表示等待连接的最长空等待时间; 对Socket来说表示读数据最长 ...

  9. pythonl练习笔记——PythonNet 套接字socket

    1 套接字socket 1.1 套接字概述 套接字,一种网络通讯工具:用于进行网络间的通信,是一种特殊文件类型, 套接字,是一个通信链的句柄,用于描述IP地址和端口,实现向网络发出请求或应答网络请求. ...

  10. 面向对象之套接字(socket)和黏包

    一丶套接字(socket) tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 基于UDP协议的socket server端: import socket udp_sk = socke ...

随机推荐

  1. Windows7蓝牙音响连接成功,但是无法播放音乐,没有声音

    本人使用的蓝牙是博通94360CD的无线网卡集成的,在Windows7系统,成功安装蓝牙驱动,但是无论连接什么蓝牙音响设备,都可以连接成功,但是在音频管理却没有蓝牙音响的设备,自然就没有声音.后来找到 ...

  2. 商城网站毕业设计( Python +Vue)

    网站介绍 基于 python 开发的电子商城网站,平台采用 B/S 结构,后端采用主流的 Python 语言进行开发,前端采用主流的 Vue.js 进行开发.这是给师弟开发的毕业设计. 整个平台包括前 ...

  3. Delete ␍eslint(prettierprettier)错误

    Delete ␍eslint(prettier/prettier)错误 今天在用HBuilder开发uniapp项目时,想换成vscode进行开发,但是用vscode打开之前的项目,eslint报错一 ...

  4. Teamcenter_SOA开发:使用SOA登录Teamcenter

    本文Teamcenter SOA使用C++参考SOA的例子进行编写,以下代码为登录Teamcenter,代码工程在Teamcenter四层环境下运行. SOA的库文件.样例文件.帮助文件在Teamce ...

  5. Django笔记十四之统计总数、最新纪录和空值判断等功能

    本篇笔记将介绍一些 Django 查询中统计总数.最新纪录和空值判断等功能. count in_bulk latest.earliest first.last exists contains.icon ...

  6. [Linux]常用命令之【diff】

    1 概述 2 diff命令 diff 命令是 Linux 上比较重要的命令行工具,用于比较文本内容,并找到不相同的地方,diff 在命令行中打印每一行的改动之处. diff 程序的输出被称为补丁(pa ...

  7. 5.mapper出错原因

    1.总结:前个星期mapper出错,很大原因是自己的项目结构创建有问题,大项目下应该是spring init那种项目结构形式,但是在创建多模块的时候应该是使用moudle形式的项目结构: 所以自己在运 ...

  8. 写一个 Hello SpringBoot2 项目

    需求:向浏览发送/hello请求,并响应 Hello,Spring Boot 2 解决: 项目目录:controller层.Main启动项.pom.xml controller层:写好逻辑跳转,当浏览 ...

  9. oracle删除一张表后,索引,同义词,视图,约束会被删除么

    问题描述:看到有一道题,说删除一张表之后,什么会被关联删除 进行测试,看看一张表什么会被关联删除,进行scoot下的EMP进行测试 一.创建测试需求用例 表结构: SQL> desc emp; ...

  10. Puppeteer+RabbitMQ:Node.js 批量加工pdf服务架构设计与落地

    全文约8500字,阅读时长约10分钟. 智慧作业最近上线「个性化手册」(简称个册)功能,一份完整的个性化手册分为三部分: •学情分析:根据学生阶段性的学习和考试情况进行学情分析.归纳.总结,汇总学情数 ...