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

这里写目录标题

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

python 复制代码
import socket

ip_port = ('127.0.0.1', 7852)  #ip地址加端口号,为什么是7852呢?我瞎编的。可以随机数~

s = socket.socket()  # 创建套接字

s.connect(ip_port)  # 连接服务器

while True:  # 通过一个死循环不断接收用户输入,并发送给服务器
    inp = input("请输入要发送的信息: ").strip()
    if not inp:  # 防止输入空信息,导致异常退出
        continue
    s.sendall(inp.encode())

    if inp == "exit":  # 如果输入的是'exit',表示断开连接
        print("结束通信!")
        break

    server_reply = s.recv(1024).decode()
    print(server_reply)

s.close()  # 关闭连接

sever端.py

python 复制代码
import socket

ip_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控制台显示:

python 复制代码
启动socket服务,等待客户端连接...

再运行client端,client.py,pycharm控制台显示:

请输入要发送的信息:

此时此刻当你输入: hi,按enter键

则会出现如下信息:

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

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

python 复制代码
启动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

相关推荐
2603_965148114 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
jufeng13075 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 8 篇】
python·ai agent·配置系统
circuitsosk5 小时前
跨境电商智能化实战:AI如何赋能客服自动回复、广告智能投放与供应链预测
大数据·人工智能·python·langchain·智能客服
記億揺晃着的那天5 小时前
NAS 内网域名访问为什么需要浏览器授权
网络·nginx·js·nas
chunmiao30326 小时前
DeepSeek V4-Pro 正式版上线,API 8月17日起分时调价
网络·安全
2601_956319886 小时前
2026年零基础学量化:从看懂示例到写清条件和动作
人工智能·python
过期的秋刀鱼!6 小时前
LangChain-D1-模型的工作流程
人工智能·python·langchain
萤火工厂目视化设计7 小时前
智能制造与企业文化目视化浪潮下:中小工厂的机遇与挑战
python·制造
DeepVisionary8 小时前
从GPT-5.6 Sol的Ultrafast模式看推理速度竞赛:750 token/秒背后,Cerebras的晶圆级生意
python·自动化
迪康Defender8 小时前
AI 重构终端安全运营:智能分析中枢 AI Insight 模块架构与落地场景深度解析
运维·网络·人工智能·其他·安全·重构·架构