当前位置: 首页 > article >正文

使用socket库创建简单的客户端和服务器

以下是使用Python的socket库创建简单的客户端和服务器的示例。这个示例将展示如何建立一个基本的TCP连接,服务器接收数据并发送响应,客户端发送数据并接收响应。

服务器端代码

首先,我们编写服务器端代码,它将监听来自客户端的连接请求:

import socket  

def start_server():  
    # 创建一个socket对象  
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  

    # 获取本地主机名和设置端口号  
    host = '127.0.0.1'  
    port = 65432  

    # 绑定socket到指定的地址和端口  
    server_socket.bind((host, port))  

    # 开始监听(可以接受连接的最大数量为1)  
    server_socket.listen(1)  
    print(f"服务器正在运行,监听 {host}:{port}")  

    while True:  
        # 接受客户端的连接  
        client_socket, addr = server_socket.accept()  
        print(f"接收到来自{addr}的连接")  

        # 接收客户端发送的数据  
        data = client_socket.recv(1024).decode()  
        print(f"接收到的数据: {data}")  

        # 发送响应  
        response = f"你好,客户端! 你发送了: {data}"  
        client_socket.send(response.encode())  

        # 关闭客户端连接  
        client_socket.close()  

if __name__ == "__main__":  
    start_server()

客户端代码

接下来,我们编写客户端代码,它将连接到服务器并发送数据:

import socket  

def start_client():  
    # 创建一个socket对象  
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  

    # 设置服务器的主机名和端口号  
    host = '127.0.0.1'  
    port = 65432  

    # 连接到服务器  
    client_socket.connect((host, port))  
    print(f"已连接到服务器 {host}:{port}")  

    # 发送数据  
    message = "您好,服务器!"  
    client_socket.send(message.encode())  
    print(f"发送的数据: {message}")  

    # 接收服务器的响应  
    response = client_socket.recv(1024).decode()  
    print(f"接收到的响应: {response}")  

    # 关闭连接  
    client_socket.close()  

if __name__ == "__main__":  
    start_client()

使用说明

  1. 运行服务器

    • 将服务器端代码保存到一个文件中,例如 server.py
    • 在命令行中运行 python server.py 启动服务器。
  2. 运行客户端

    • 将客户端代码保存到另一个文件中,例如 client.py
    • 在另一个命令行窗口中运行 python client.py 启动客户端。

结果

  • 服务器会显示接收到的数据以及客户端的连接信息。
  • 客户端会显示其发送的消息以及服务器的响应。

通过上述代码示例,您可以了解到如何使用Python的socket库创建基本的TCP客户端和服务器。可以根据需要扩展代码,比如添加异常处理、支持多客户端连接等。


http://www.kler.cn/a/376519.html

相关文章:

  • 【FNENet】基于帧级非语言特征增强的情感分析
  • docker-高级(待补图)
  • Nginx 配置基于IP 地址的 Web 服务器
  • 7.使用Redis进行秒杀优化
  • wx.setNavigationBarColor动态设置导航栏颜色无效(亲测有效)
  • 刘艳兵-DBA021-升级到Oracle Database 12c时,关于使用Export/Import方法迁移数据的说法是正确的?
  • 快速入门kotlin编程(精简但全面版)
  • 树莓派基本设置--8.播放音频和视频
  • 服务器数据恢复—DELL EqualLogic PS6100系列存储简介及如何收集故障信息?
  • 如何在Linux命令行中使用GhatGPT
  • 红队-windows基础篇
  • 基于uniapp微信小程序的校园二手书交易系统
  • jsp页面使用jQuery 给java后端传送数组怎么传送,
  • 数字马力二面面试总结
  • linux驱动—input输入子系统
  • 稀疏检索器除了 TF-IDF、BM25 算法外
  • django请求与响应
  • pdf怎么转换成ppt?有详细的步骤
  • 如何为STM32的串口编写中断程序
  • 491.递增子序列
  • Android各种调试命令
  • 2、片元着色器之有向距离场(SDF)运算:并集、差集、交集
  • go语言中interface之间嵌入与struct之间的嵌入实现多态
  • aws boto3 下载文件
  • 螺旋式开发是不是就是敏捷开发?
  • Jenkins面试整理-如何在 Jenkins 中进行并行构建?