Python 网络编程之搭建简易服务器和客户端

用Python搭建简易的CS架构并通信


文章目录


前言

本文主要是用Python写一个CS架构的东西,包括服务器和客户端。程序运行后在客户端输入消息,服务器端会收到这条消息。


一、基本结构

需要新建两个py文件,一个用来运行服务器端,一个用来运行客户端。进行测试时,需要保证服务器端和客户端都在运行。


二、代码编写

1.服务器端

代码如下:

python 复制代码
import socket

host = 'localhost'
port = 9999

sockaddr = (host, port)
sk = socket.socket()
sk.bind(sockaddr)
sk.listen(100)

while True:
    conn, addr = sk.accept()
    
    while True:
        try:
            data = conn.recv(1024)
        except Exception as ex:
            print('已断开连接')
            break
            
        else:
            conn.sendall(data+bytes(',已收到'.encode('utf-8')))
            print(data)

可能看不懂的代码解释如下:

  1. import socket:导入Python内置的socket模块,该模块提供了与网络通信相关的功能。
  2. host = 'localhost':设置服务器的地址为 'localhost'。localhost 表示本机,即运行此程序的计算机。
  3. port = 9999:设置服务器的端口号为 9999。端口号是用来标识网络中进程的逻辑地址。
  4. sockaddr = (host, port):将服务器的地址和端口号组合成一个元组(socket地址),用于后续的socket操作。
  5. sk = socket.socket():创建一个socket对象(sk),用于网络通信。
  6. sk.bind(sockaddr):将socket地址绑定到socket对象上,这样socket就可以在指定的地址和端口上接收连接。
  7. sk.listen(100):将socket设置为监听模式,参数100表示最大等待连接队列的长度。
  8. conn, addr =sk.accept():调用socket对象的accept()方法,等待并接受一个客户端的连接请求。返回值是一个包含新连接的socket对象(conn)和客户端的地址信息(addr)的元组。
  9. data =conn.recv(1024):调用新连接的socket对象(conn)的recv()方法,接收客户端发送的数据,参数1024表示一次最多接收1024字节的数据。
  10. conn.sendall(data+bytes(',已收到'.encode('utf-8'))):调用新连接的socket对象(conn)的sendall()方法,向客户端发送数据。这里将接收到的数据和字符串",已收到"(已转换为字节串)拼接起来发送。

2.客户端

代码如下:

python 复制代码
import socket

host = 'localhost'
port = 9999

sockaddr = (host, port)
ct = socket.socket()
ct.connect(sockaddr)

while True:
    message = input('请输入要发送的信息:')
    ct.sendall(bytes(message, 'utf-8'))

    data = ct.recv(1024)
    print(data.decode('utf-8'))

可能看不懂的代码解释如下:

  1. import socket:导入Python内置的socket模块,该模块提供了与网络通信相关的功能。
  2. ct =socket.socket():创建一个socket对象(ct,通常客户端的socket对象命名为ct或client_socket),用于网络通信。
  3. ct.connect(sockaddr):调用socket对象的connect()方法,尝试连接到指定的服务器地址和端口。
  4. ct.sendall(bytes(message,'utf-8')):调用socket对象的sendall()方法,将用户输入的消息(转换为字节串)发送给服务器。这里使用了UTF-8编码。
  5. data =ct.recv(1024):调用socket对象的recv()方法,接收服务器发送的数据,参数1024表示一次最多接收1024字节的数据。
  6. print(data.decode('utf-8')):将接收到的服务器数据(字节串)解码为字符串,并打印出来。这里使用了UTF-8编码。

三、效果展示


总结

这段代码实现了一个简单的TCP客户端,它连接到本地主机的9999端口,并在循环中不断接收用户的输入,将输入的消息发送给服务器,然后接收并打印服务器的回复。循环会一直进行,直到程序被手动中断。

相关推荐
那就回到过去18 小时前
RSTP的工作原理
运维·服务器·网络
南宫乘风18 小时前
Kubernetes 网络问题排查:在宿主机对 Pod 抓包(nsenter + tcpdump 实战)
网络·kubernetes·tcpdump
啊阿狸不会拉杆18 小时前
《机器学习导论》第3章 -贝叶斯决策理论
人工智能·python·算法·机器学习·numpy·深度优先·贝叶斯决策理论
阿蔹18 小时前
力扣面试题二Python
python·算法·leetcode·职场和发展
星辰_mya18 小时前
Elasticsearch之中
java·服务器·数据库
Gofarlic_OMS18 小时前
Altium许可证状态自动化监控方案
大数据·运维·服务器·人工智能·自动化·github
郝亚军18 小时前
Ubuntu启一个tcp server,client去连接
linux·服务器·数据库
TG_yunshuguoji18 小时前
亚马逊云代理商: 深度解析AWS RDS备份机制 快照 vs PITR如何选?
服务器·云计算·aws
2501_9421917718 小时前
汽车脏污检测与识别 - YOLO11-C3k2-PSFSConv优化模型详解
python
范纹杉想快点毕业18 小时前
状态机设计模式与嵌入式系统开发完整指南
java·开发语言·网络·数据库·mongodb·设计模式·架构