python socket模块创建和使用套接字示例详解
作者:移动安全星球 发布时间:2021-12-30 13:05:49
套接字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://segmentfault.com/a/1190000043880894


猜你喜欢
- 计算机为数组分配一段连续的内存,从而支持对数组随机访问;由于项的地址在编号上是连续的,数组某一项的地址可以通过将两个值相加得出,即将数组的基
- 前一段时间,一个流行的东方系列mv 《bad apple》 带来一股奇怪的风潮: 各种技术狂人纷纷把这段mv在一些匪夷
- 问题:1.一个销售系统,设有各级代理商,每个代理商的表是这样设计的 数据库结构表1: 代理商资料表[id]
- 1. 认识数据库1.1 数据库和数据结构的关系数据结构:是指相互之间存在一种或多种特定关系的数据元素的集合,是一个抽象的学科我们熟知的数据结
- Flask框架难学吗?它和Django哪个更容易一些,这可能是学Python web开发的同学经常问的问题,下面来说一下flask框架。Fl
- python中的lambda通常是用来在python中创建匿名函数的,而用def创建的方法是有名称的,除了从表面上的方法名不一样外,pyth
- 前言看了网上许多关于Windows 本地安装mysql的很多教程,基本上大同小异。但是安装软件有时就可能因为一个细节安装失败。我也是综合了很
- 记得当时我们要跟网友天下合作,需要这样的一个鼠标划过放大的列表效果,就写了一个效果截图:演示代码:<!DOCTYPE html PUB
- 第一:编写限制搜索范围的查询语句。众所周知,在数据库查询的时候返回记录的多少直接关系到查询的效率。所以,在客户端通过一定的条件语句,限制搜索
- 一、Python2中的字符存在的解码编码问题如果是现在正在用Python2的人应该都知道存在字符编码问题,就举一个最简单的例子吧:Pytho
- 其主要的优点便是无需再手工添加大量的信息了,可以指定对某一个站信息的截取进行批量录入,达到省时省力的目的。与其单纯的ASP小偷程序不同的是:
- 图片人脸检测#coding=utf-8import cv2import dlibpath = "img/meinv.png&quo
- 这是模拟淘宝的一个简易的购物商城程序。用户入口具有以下功能:登录认证可以锁定用户密码输入次数大于3次,锁定用户名连续三次输错用户名退出程序可
- 源码: 代码如下: <% '隐藏并修改文件的最后修改时间的aspshell '原理:通过FSO可以修改文件的属性,比
- 一 、精灵(Sprite),屏幕上的对象。精灵组是精灵的组合。创建空的精灵组对象:精灵组可以对其中的所有精灵调用它们各自的更新方法(self
- Go文档中展示了多种方式实现外部资源嵌入,包括文本文件、图片、ios文件等:文本文件package mainimport _ "e
- 通常的情况是,我们一般会载入一个模板文件,然后用 Context渲染它,最后返回这个处理好的HttpResponse对象给用户。 我们已经优
- 阅读上一篇:W3C优质网页小贴士(二) 注意字体大小网页设计者中有这么一种倾向:他们认为小字体能让网页看起来更漂亮,并能提供更多空间给每个网
- 慢SQL与索引的关系慢SQL优化原则数据库也是应用,MySQL 作为一种磁盘数据库,属于典型的 IO 密集型应用,并且随机 IO 比顺序 I
- 比如说,name=John。在队列里,值和表单用一个&符号分开,空格用+号替换,特 殊的符号转换成十六进制的代码。因为这一队列在UR