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端口,并在循环中不断接收用户的输入,将输入的消息发送给服务器,然后接收并打印服务器的回复。循环会一直进行,直到程序被手动中断。

相关推荐
电饭叔26 分钟前
《python语言程序设计》2018版第8章19题几何Rectangle2D类(下)-头疼的几何和数学
开发语言·python
程序猿小D1 小时前
第二百六十七节 JPA教程 - JPA查询AND条件示例
java·开发语言·前端·数据库·windows·python·jpa
不灭锦鲤2 小时前
ssrf学习(ctfhub靶场)
网络·学习·安全
weixin_548444262 小时前
2024年最新版本神马TV8.5影视APP源码 293TV影视点播系统源码搭建教程 神马TV8.2加强版反编译教程 保姆级小白可搭建 完整版本视频教程
网络
杰哥在此2 小时前
Python知识点:如何使用Multiprocessing进行并行任务管理
linux·开发语言·python·面试·编程
枫叶丹44 小时前
【在Linux世界中追寻伟大的One Piece】进程信号
linux·运维·服务器
zaim14 小时前
计算机的错误计算(一百一十四)
java·c++·python·rust·go·c·多项式
网络研究院4 小时前
如何安全地大规模部署 GenAI 应用程序
网络·人工智能·安全·ai·部署·观点
limengshi1383924 小时前
通信工程学习:什么是RIP路由信息协议
网络·网络协议·学习·智能路由器·信息与通信
灯火不休ᝰ5 小时前
[win7] win7系统的下载及在虚拟机中详细安装过程(附有下载文件)
linux·运维·服务器