Python编程-Socket网络编程

简介: Python编程-Socket网络编程

Python编程-Socket网络编程
Socket(套接字)是计算机之间进行网络通信的一套程序接口,相当于在发送端和接收端之间建立一个通信管道。在实际应用中,一些远程管理软件和网络安全软件大多依赖于Socket来实现特定的功能。目前最流行的网络传输协议是TCP/IP协议,因此今天的用例就是基于这个TCP/IP协议编程。编写TCP时会用到Socket模块,编程的步骤及调用的函数分服务端和客户端两部分,如下所示:

(一)服务端程序步骤以及调用函数:

  1. 调用socket()函数创建一个套接字s_Server(本例取名)
  2. 调用bind(address)函数将套接字s_Server绑定到已知地址,通常为本地ip
  3. 调用listen(backlog)将套接字s_Server设为监听模式,准备接受来自各客户端到连接请求
  4. 调用accept()函数响应客户端连接请求并接受一个连接
  5. 如果接收到客户端请求,则accept()返回, 得到新到套接字s_Conn(本例取名)
  6. 调用recv(bufsize[,flgas])函数接收来自客户端的数据,调用send(bytes[,flags])函数向客户端发送数据
  7. 如果要退出服务器程序,则调用close()函数关闭最初的套接字s_Server服务器进程
    (二) 客户端程序步骤以及调用函数:
  8. 调用socket()函数创建一个流式套接字,返回套接字s_Client(本例取名)
  9. 调用connect()函数将套接字s_Client连接到服务器
  10. 调用send(bytes[,flags])函数向服务器发送数据,调用recv(bufsize[,flags])函数接收来自服务器的数据
  11. 与服务器的通信结束后, 客户端程序可以调用close()函数关闭套接字。

由于TCP是面向连接的,相对UDP提供更高的可靠性。设计一个简单的通信系统,服务端和客户单代码如下:

(1) 服务器端代码:

# 服务端代码
#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :3/14/22 8:33 PM
# 文件      :socket服务器.py
# IDE      :PyCharm

# 导入模块
import socket
from IPython.display import clear_output

# 指定端口号
PORT = 8001
# 获取本机名称
NAME = socket.gethostname()

# 创建socket对象s_Server,基于tcp/ip协议
s_Server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定到本地8001端口
s_Server.bind(('', PORT))
# 监听本地端口8001,等待连接队列最大长度5
s_Server.listen(5)

# 设定缓冲区读取数据的大小
buff_Size = 1024

print(f'{NAME}服务器等待连接....')

while True:
    # 接收来自客户端到连接
    conn, addr = s_Server.accept()
    # 接收客户端信息
    recv_Info = conn.recv(buff_Size).decode()
    # 获取客户端机器名称
    name_Client = socket.gethostbyaddr(addr[0])
    if recv_Info == '':
        # 清除屏幕信息
        clear_output()
        print(f'收到来自{name_Client}的信息为空!')
        break
    else:
        # 输出客户端的信息
        print(f'收到来自{name_Client}的信息{recv_Info}')

        # 发送的数据类型必须是bytes, 所以要编码
    conn.send(f'服务端接收到了信息: {recv_Info}'.encode())
# 服务端也调用close()关闭socket
s_Server.close()

运行结果如下图:

image.png
(2)客户端代码:

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :3/14/22 8:48 PM
# 文件      :socket客户端.py
# IDE      :PyCharm

import socket
# 指定端口8001
PORT = 8001
# 设定读取缓冲区字节大小
buff_Size = 512
# 创建客户端套接字实例
s_Client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    # 连接服务端 本例服务器地址:192.168.68.242,若是在服务器本机操作,可以用空格''代替
    s_Client.connect(('192.168.68.242', PORT))

    while True:

        send_Info = input("请输入发送给服务器的信息:")
        # 发送给服务器端信息,需要编码为bytes
        s_Client.send(send_Info.encode())
        if send_Info == '':
            print('发送给服务器的信息不能为空!')
            break
        else:
        # 等待接收服务端的消息
            recved_Info = s_Client.recv(buff_Size)
        # 打印读取的信息
            print(recved_Info.decode())
        # 如果返回空bytes,表示对方关闭了连接
        if not recved_Info:
            print('请核实服务器端是否开启服务!!')
            break
except:
    print('服务器端拒绝连接!请确认服务器端地址是否正确或者服务是否开启!')

s_Client.close()

运行结果如下:
image.png
image.png
备注:客户端是Win10系统+Jupyterbook环境,服务器端是macOS系统+Pycharm环境

相关文章
|
9月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1463 102
|
9月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
481 104
|
9月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
373 103
|
10月前
|
机器学习/深度学习 算法 安全
【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)
【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)
441 0
|
9月前
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
399 82
|
8月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的青少年网络使用情况分析及预测系统
本研究基于Python大数据技术,构建青少年网络行为分析系统,旨在破解现有防沉迷模式下用户画像模糊、预警滞后等难题。通过整合多平台亿级数据,运用机器学习实现精准行为预测与实时干预,推动数字治理向“数据驱动”转型,为家庭、学校及政府提供科学决策支持,助力青少年健康上网。
|
8月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
496 3
|
8月前
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
721 3
|
8月前
|
并行计算 安全 计算机视觉
Python多进程编程:用multiprocessing突破GIL限制
Python中GIL限制多线程性能,尤其在CPU密集型任务中。`multiprocessing`模块通过创建独立进程,绕过GIL,实现真正的并行计算。它支持进程池、队列、管道、共享内存和同步机制,适用于科学计算、图像处理等场景。相比多线程,多进程更适合利用多核优势,虽有较高内存开销,但能显著提升性能。合理使用进程池与通信机制,可最大化效率。
534 3
|
8月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
743 0

推荐镜像

更多