Python网络编程之Socket通信简单实

简介: Python网络编程之Socket通信简单实

Socket是一个TCP/IP网络通讯的抽象层,提供一系列的数据交互操作接口,这样开发者可以不再关注于具体的协议处理细节,从而快速的让自己的程序实现网络数据交互。

简单来说,程序进程之间需要通过socket进行通信,它类似于一个插件,所有进程必须进行关联才能工作。只要是与网络相关的应用程序,都必须使用socket。

img

Python的Socket编程中一般分为TCP和UDP两种通讯协议,而socket是基于C/S架构的,所以socket网络编程,需要编写客户端程序和服务端程序。

TCP通信流程

img
客户端流程

  1. 初始化socket()
  2. 使用ip和端口号connect()连接服务器
  3. 使用recv()接收数据,send()发送数据与服务器进行交互
  4. 关闭socket()

服务端流程

  1. 初始化socket()
  2. 使用bind()绑定ip和端口号
  3. 使用listen()监听消息
  4. 获取客户端的套接字地址accept()
  5. 使用recv()接收数据,send()发送数据与客户端进行交互
  6. 关闭socket()

在Python中使用socket.socket类即可实现TCP程序开发socket.socket(AddressFamily, Type)

参数说明:

  • AddressFamily 表示IP地址类型, 分为TPv4和IPv6
  • Type 表示传输协议类型

常用方法如下:

函数 描述
socket() 获取socket类对象
bind((hostname, port)) 在指定主机的端口绑定监听
listen() 在绑定端口上开启监听,参数表示最大等待建立连接的个数
accept() 等待客户端连接,连接后返回客户端地址
send(data) 发送数据,data 是二进制数据
recv(buffer) 表示接收数据, buffersize 是每次接收数据的长度
close() 关闭套接字连接
connect((hostname, port)) 设置要连接的主机名称与端口号

使用Python实现TCP通信代码:

服务器端:

import socket
# 创建一个socket对象,默认TCP套接字
s = socket.socket()
# 绑定端口
s.bind(('127.0.0.1',9006))
# 监听端口
s.listen(5)
print("正在连接中……")

# 建立连接之后,持续等待连接
while 1:
    # 阻塞等待连接
    sock,addr = s.accept()
    print(sock,addr)
    # 一直保持发送和接收数据的状态
    while 1:
        text = sock.recv(1024)
        # 客户端发送的数据为空的无效数据
        if len(text.strip()) == 0:
            print("服务端接收到客户端的数据为空")
        else:
            print("收到客户端发送的数据为:{}".format(text.decode()))
            content = input("请输入发送给客户端的信息:")
            # 返回服务端发送的信息
            sock.send(content.encode())

    sock.close()

客户端:

import socket
# 创建一个socket对象
s1 = socket.socket()
s1.connect(('127.0.0.1', 9006))
# 不断发送和接收数据
while 1:
    send_data = input("客户端要发送的信息:")
    # socket传递的都是bytes类型的数据,需要转换一下
    s1.send(send_data.encode())
    # 接收数据,最大字节数1024,对返回的二进制数据进行解码
    text = s1.recv(1024).decode()
    print("服务端发送的数据:{}".format(text))
    print("------------------------------")

img

因为网络通信需要通过ip地址找到网络中的设备,通过端口号找到对应进程的端口,所以客户端ip端口必须和客户端ip端口保持一致。

当客户端和服务端建立连接后,退出程序后端口号不会立即释放,需要等待大概1-2分钟。可以通过设置端口复用解决(tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)

上面的代码实现了TCP服务端程序只能服务于一个客户端,如果服务端程序要和多个客户端通信,则可以使用多线程或者socketserver模块,socketserver是socket的再封装,从而简化socket网络编程的方法。

更多关于python socket的使用,可以查看官方文档学习:

https://docs.python.org/zh-cn/3/library/socketserver.html#module-socketserver

https://docs.python.org/zh-cn/3/library/socket.html

https://docs.python.org/zh-cn/3/howto/sockets.html

目录
相关文章
|
13天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
66 4
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
1月前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
286 55
|
1月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
189 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
1月前
|
负载均衡 网络协议 算法
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
这网络层就像搭积木一样,上层协议都是基于下层协议搭出来的。不管是ping(用了ICMP协议)还是tcp本质上都是基于网络层IP协议的数据包,而到了物理层,都是二进制01串,都走网卡发出去了。 如果网络环境没发生变化,目的地又一样,那按道理说他们走的网络路径应该是一样的,什么情况下会不同呢? 我们就从路由这个话题聊起吧。
65 4
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
|
20天前
|
算法 网络协议 Python
探秘Win11共享文件夹之Python网络通信算法实现
本文探讨了Win11共享文件夹背后的网络通信算法,重点介绍基于TCP的文件传输机制,并提供Python代码示例。Win11共享文件夹利用SMB协议实现局域网内的文件共享,通过TCP协议确保文件传输的完整性和可靠性。服务器端监听客户端连接请求,接收文件请求并分块发送文件内容;客户端则连接服务器、接收数据并保存为本地文件。文中通过Python代码详细展示了这一过程,帮助读者理解并优化文件共享系统。
|
1月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
90 3
|
2月前
|
安全 搜索推荐 网络安全
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
85 11
|
2月前
|
网络安全 Python
Python网络编程小示例:生成CIDR表示的IP地址范围
本文介绍了如何使用Python生成CIDR表示的IP地址范围,通过解析CIDR字符串,将其转换为二进制形式,应用子网掩码,最终生成该CIDR块内所有可用的IP地址列表。示例代码利用了Python的`ipaddress`模块,展示了从指定CIDR表达式中提取所有IP地址的过程。
66 6
|
2月前
|
机器学习/深度学习 自然语言处理 语音技术
Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧
本文介绍了Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧,并通过TensorFlow和PyTorch等库展示了实现神经网络的具体示例,涵盖图像识别、语音识别等多个应用场景。
90 8
|
2月前
|
网络协议
计算机网络与通信
计算机网络基本概念:了解计算机网络的定义、功能、分类和拓扑结构(如总线型、星型、环型、树形、网状等)。 网络通信原理:了解网络通信的基本原理、协议和技术,如TCP/IP协议、网络通信设备等。
37 3