网络编程——Python简单TCP通信功能代码实践

这里写目录标题

  • Python简单TCP通信功能代码实践
    • 阅读本博客前需准备的
    • 几个问题
      • 1. 网络通信的机制是什么?
      • 2. 什么是python进行网络编程?
      • 3. IP地址和端口是什么?
    • 一个简单的TCP通信功能示例:
      • client端.py
      • sever端.py
      • PYCHARM运行结果

Python简单TCP通信功能代码实践

阅读本博客前需准备的

python
pycharm
socket包

几个问题

1. 网络通信的机制是什么?

网络通信就好比打电话,有人发出,就有人接收。因此有了服务器和客户端。不同于python数据分析,在网络通信需要写好两个端。

2. 什么是python进行网络编程?

用Python进行网络编程,就是在Python程序本身这个进程内,连接别的服务器进程的通信端口进行通信。Python 网络编程和其它语言类似,通常通过"Socket(套接字)"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
在用python编写的时候,通常要写两套,也就是服务端的逻辑和客户端的逻辑。

3. IP地址和端口是什么?

在网络中每台计算机都必须有一个的IP地址;目前,IP地址广泛使用的版本是IPv4 32位,4个字节,用点分十进制的格式表示,例如:192.168.1.100 。
127.0.0.1 是固定IP地址,代表当前计算机,相当于面向对象里的 “this”。
“IP地址+端口号”就可以区分不同的主机服务了,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。

一个简单的TCP通信功能示例:

client端.py

import socketip_port = ('127.0.0.1', 7852)  #ip地址加端口号,为什么是7852呢?我瞎编的。可以随机数~s = socket.socket()  # 创建套接字s.connect(ip_port)  # 连接服务器while True:  # 通过一个死循环不断接收用户输入,并发送给服务器inp = input("请输入要发送的信息: ").strip()if not inp:  # 防止输入空信息,导致异常退出continues.sendall(inp.encode())if inp == "exit":  # 如果输入的是‘exit’,表示断开连接print("结束通信!")breakserver_reply = s.recv(1024).decode()print(server_reply)s.close()  # 关闭连接

sever端.py

import socketip_port = ('127.0.0.1', 7852)sk = socket.socket()  # 创建套接字
sk.bind(ip_port)  # 绑定服务地址
sk.listen(5)  # 监听连接请求
print('启动socket服务,等待客户端连接...')
conn, address = sk.accept()  # 等待连接,此处自动阻塞
while True:  # 一个死循环,直到客户端发送‘exit’的信号,才关闭连接client_data = conn.recv(1024).decode()  # 接收信息if client_data == "exit":  # 判断是否退出连接exit("通信结束")print("来自%s的客户端向你发来信息:%s" % (address, client_data))conn.sendall('服务器已经收到你的信息'.encode())  # 回馈信息给客户端
conn.close()  # 关闭连接

PYCHARM运行结果

打开pycharm,先运行server端,server.py,pycharm控制台显示:

启动socket服务,等待客户端连接...

再运行client端,client.py,pycharm控制台显示:
请输入要发送的信息:
此时此刻当你输入: hi,按enter键
则会出现如下信息:
在这里插入图片描述

请输入要发送的信息: hi
服务器已经收到你的信息
请输入要发送的信息: hello
服务器已经收到你的信息
请输入要发送的信息: 差不多了吧
服务器已经收到你的信息
请输入要发送的信息: 那就拜拜了
服务器已经收到你的信息
请输入要发送的信息: exit
结束通信!

与此同时,也可以观察sever.py端的运行情况。当client输入一个信息时,sever端的控制台下方能正常显示收到的信息,则表示两者已经互通成功,是不是很神奇!

启动socket服务,等待客户端连接...
来自('127.0.0.1', 49602)的客户端向你发来信息:hi
来自('127.0.0.1', 49602)的客户端向你发来信息:hello
来自('127.0.0.1', 49602)的客户端向你发来信息:差不多了吧
来自('127.0.0.1', 49602)的客户端向你发来信息:那就拜拜了
通信结束

ok啦!有一个小细节,就是源码中的端口是7852,但是在实际运行中,变成了49602。查了一下原因,可能是指定的端口(7852)已经被其他程序占用了。当尝试绑定一个被占用的端口时,操作系统会拒绝该请求,并可能自动分配一个随机的可用端口。

当再次运行会发现报这样的错误,只需要改一下端口就行了。
在这里插入图片描述
又可以重新建立起通信了!

今天的初探就到这了,如何进行网络编程和应用,有待进一步挖掘~

引用:
Python网络编程入门: https://blog.csdn.net/cnds123/article/details/121719357

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/885762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt QGesture详解

1、概述 QGesture 是 Qt 框架中用于处理多点触控和手势识别的类。它封装了用户输入的手势信息,如触摸、滑动、捏合、旋转等,使得开发者能够轻松地实现复杂的手势交互功能。QGesture 类本身是一个抽象基类,不能直接实例化,而是通过…

基于C语言——跑得快扑克牌游戏开发指南

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 ✨特色专栏&#xff1a…

7+纯生信,单细胞识别细胞marker+100种机器学习组合建模,机器学习组合建模取代单独lasso回归势在必行!

影响因子:7.3 研究概述: 皮肤黑色素瘤(SKCM)是所有皮肤恶性肿瘤中最具侵袭性的类型。本研究从GEO数据库下载单细胞RNA测序(scRNA-seq)数据集,根据原始研究中定义的细胞标记重新注释各种免疫细胞…

丹摩征文活动 | 0基础带你上手经典目标检测模型 Faster-Rcnn

文章目录 🍋1 引言🍋2 平台优势🍋3 丹摩平台服务器配置教程🍋4 实操案例( Faster-rcnn 项目)🍋4.1 文件处理🍋4.2 环境配置🍋4.3 训练模型🍋4.4 数据保存并导…

【GPTs】Get Simpsonized:一键变身趣味辛普森角色

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 💯GPTs指令💯前言💯Get Simpsonized主要功能适用场景优点缺点使用方式 💯小结 💯GPTs指令 中文翻译: 指令保护和安全规则&…

【C++】 C++游戏设计---五子棋小游戏

1. 游戏介绍 一个简单的 C 五子棋小游戏 1.1 游戏规则&#xff1a; 双人轮流输入下入点坐标横竖撇捺先成五子连线者胜同一坐标点不允许重复输入 1.2 初始化与游戏界面 初始化界面 X 输入坐标后 O 输入坐标后 X 先达到胜出条件 2. 源代码 #include <iostream> #i…

树-好难-疑难_GPT

// // Created by 徐昌真 on 2024/11/10. // #include <iostream> using namespace std;template<typename T> struct ListNode{ //新建链表节点T data; //指向下一个子节点 ListNode< TreeNode<T>* > childHead; 这里的 T 是TreeNde类型的…

Suricata

02-Suricata 一 ICMP流量预警 一条ICMP报文有四个重要内容&#xff0c;可与相应的ICMP关键字相匹配。它们是&#xff1a;消息的类型、代码、ID和序列。 通过ICMP的type进行匹配 alert icmp any any <> any any (msg:"icmp流量预警";itype:8;threshold:type t…

分享一些Kafka集群优化的最佳实践?

以下是一些 Kafka 集群优化的最佳实践&#xff1a; 复制策略配置&#xff1a; 在 server.properties 文件中配置 default.replication.factor 来指定每个主题的默认副本因子&#xff0c;以及 min.insync.replicas 来配置每个分区中必须要保持同步的最小副本数。这可以提高 Kafk…

web前端动画按钮(附源代码)

效果图 源代码 HTML部分 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> …

实操篇:容器服务如何启动系统?

容器服务如何启动系统&#xff1f;容器服务的启动主要依赖Docker和Kubernetes。Docker通过镜像创建和管理容器&#xff0c;支持多种重启策略以确保容器稳定运行。Kubernetes则负责自动化部署、扩展和管理容器化应用&#xff0c;其核心是Pod&#xff0c;包含一个或多个容器。用户…

conda与pip 安装软件包的 代理/换源 解决方案

方案0&#xff1a;终端set proxy set http_proxyhttp://127.0.0.1:7890 set https_proxyhttps://127.0.0.1:7890 export http_proxyhttp://127.0.0.1:7890 export https_proxyhttps://127.0.0.1:7890查看 set | grep proxy echo $https_proxy区别 使用set可以设置和查看变量…

最全Web自动化测试面试题

1、Selenium 中 hidden 或者是 display none 的元素是否可以定位到&#xff1f; 不可以。可以写 JavaScript 将标签中的 hidden 先改为 0&#xff0c;再进行定位元素。 2、Selenium 中如何保证操作元素的成功率&#xff1f;也就是说如何保证我点击的元素一 定是可以点击的&a…

PHP爬虫快速获取京东商品详情(代码示例)

在当今互联网时代&#xff0c;数据的重要性不言而喻。对于电商领域来说&#xff0c;获取商品信息是数据分析、市场研究和价格监控的基础。本文将介绍如何使用PHP编写一个简单的爬虫&#xff0c;以快速获取京东商品的详情信息。 1. 概述 京东是中国领先的电商平台之一&#xff…

一、HTML

一、基础概念 1、浏览器相关知识 这五个浏览器市场份额都非常大&#xff0c;且都有自己的内核。 什么是内核&#xff1a; 内核是浏览器的核心&#xff0c;用于处理浏览器所得到的各种资源。 例如&#xff0c;服务器发送图片、视频、音频的资源&#xff0c;浏览…

记录一次非常奇怪的MIME type of “text/html“报错

报错现象 访问指定地址&#xff0c;一直转圈打不开&#xff0c;打开游览器控制台发现有如下报错&#xff1a; Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of “text/html”. Strict MIME type checking i…

Windows10/11开启卓越性能模式 windows开启卓越性能电源模式 工作电脑开启卓越性能模式 电脑开启性能模式

Windows10/11开启卓越性能模式 windows开启卓越性能电源模式 工作电脑开启卓越性能模式 电脑开启性能模式 1、所要用到的激活工具2、开启电脑卓越性能模式Windows11Windows10在电源模式中选择卓越性能模式 3、将系统版本切换为 工作站版本 1、所要用到的激活工具 KMS激活工具(…

膜计算 MATLAB例程(仅例程,无背景)

膜计算的实现可以用 MATLAB 进行简单的模拟。以下是一个基础的膜计算模型的示例代码&#xff0c;模拟了膜内部对象的产生和转化过程。这个例子使用简单的对象和规则来演示膜计算的基本思想。 文章目录 主要概念应用领域优势与挑战代码MATLAB 膜计算示例代码代码说明运行代码总结…

Request和Response

前言 这一节主要讲的是Request和Response还有一些实例 1. 介绍 就是这两个参数 WebServlet("/demo7") public class ServletDemo7 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletExcepti…

Vue全栈开发旅游网项目(10)-设计用户模型

1.设计用户模型 文件地址&#xff1a;accounts/models.py 1.1 用户详细信息 内容包括&#xff1a;性别 手机号 年龄 生日 真实姓名 创建常量&#xff1a;1-男&#xff0c;0-女&#xff1b;editableFalse不许循环 class Profile(models.Model):SEX_CHOICES{(1,男),(0,女)}u…