2025年2月2日(网络编程 tcp)

news/2025/2/3 19:48:04 标签: 网络, tcp/ip, 网络协议

tcp 循环服务

import socket


def main():
    # 创建 socket
    # 绑定
    tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_server.bind(("", 8080))

    # socket 转变为被动
    tcp_server.listen(128)

    while True:
        # 产生专门为链接进来的客户端服务的 socket
        print("堵塞-1")
        server_client, client_addr = tcp_server.accept()

        # 接收数据(来自客户端)
        print(client_addr)
        while True:
            recv_msg = server_client.recv(1024)
            if recv_msg:
                print(recv_msg.decode("utf-8"))
            else:
                print("用户下线")
                break

            # 发送数据(发送到客户端)
            server_client.send("谢谢".encode("utf-8"))

        # 关闭套接字
        server_client.close()
        print("服务完毕")

    tcp_server.close()


if __name__ == "__main__":
    main()

在这里插入图片描述

下载器

import socket


def main():
    # 创建 socket
    tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_client.bind(("", 8081))

    # 链接服务器
    tcp_client.connect(("192.168.0.178", 8080))

    # 发送数据
    send_data = input("请输入下载名称:")
    tcp_client.send(send_data.encode("utf-8"))

    # 接收数据
    recv_msg = tcp_client.recv(1024)  # 1024 bytes 1 kB
    print(recv_msg)

    # 保存数据
    # 存在再创建
    if recv_msg:  # 服务器关闭解堵塞
        with open("[测试]" + send_data, "wb") as f:
            f.write(recv_msg)

    # 关闭套接字
    tcp_client.close()


if __name__ == "__main__":
    main()
import socket


def main():
    # 创建 socket
    # 绑定
    tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_server.bind(("192.168.0.178", 8080))

    # socket 转变为被动
    tcp_server.listen(128)

    # 产生专门为链接进来的客户端服务的 socket
    print("堵塞-1")
    server_client, client_addr = tcp_server.accept()

    # 接收数据(来自客户端)
    print(client_addr)
    recv_msg = server_client.recv(1024)
    print(recv_msg.decode("utf-8"))

    # 发送数据(发送到客户端)
    file_name = recv_msg.decode("utf-8")

    file_content = None

    try:
        f = open(file_name, "rb")
        file_content = f.read()
        f.close()
    except Exception:
        print("没有要下载的文件")

    if file_content:
        server_client.send(file_content)

    # 关闭套接字
    server_client.close()
    tcp_server.close()


if __name__ == "__main__":
    main()

在这里插入图片描述
在这里插入图片描述


http://www.niftyadmin.cn/n/5841032.html

相关文章

【HTML入门】Sublime Text 4与 Phpstorm

文章目录 前言一、环境基础1.Sublime Text 42.Phpstorm(1)安装(2)启动Phpstorm(3)“启动”码 二、HTML1.HTML简介(1)什么是HTML(2)HTML版本及历史(3)HTML基本结构 2.HTML简单语法(1)HTML标签语法(2)HTML常用标签(3)表格(4)特殊字符 总结 前言 在当今的软件开发领域&#xff0c…

PHP代码审计学习02

目录 代码审计一般思路 Beescms代码审计(upload) Finecms基于前台MVC任意文件上传挖掘思路 CLTPHP基于thinkphp5框架的文件上传挖掘思路 今天来看PHP有框架MVC类,文件上传,断点调试挖掘。 同样还是有关键字搜索和功能点抓包两…

MVC、MVP和MVVM模式

MVC模式中,视图和模型之间直接交互,而MVP模式下,视图与模型通过Presenter进行通信,MVVM则采用双向绑定,减少手动同步视图和模型的工作。每种模式都有其优缺点,适合不同规模和类型的项目。 ### MVVM 与 MVP…

LeetCode:63. 不同路径 II

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:63. 不同路径 II 给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角(即 grid[0][0]…

Python - pyautogui库 模拟鼠标和键盘执行GUI任务

安装库: pip install pyautogui 导入库:import pyautogui 获取屏幕尺寸: s_width, s_height pyautogui.size() 获取鼠标当前位置: x, y pyautogui.position() 移动鼠标到指定位置(可以先使用用上一个函数调试获取当…

【Elasticsearch】_all 查询

在 Elasticsearch 中,_all 查询是一种特殊的查询方式,用于在多个索引或数据流中执行搜索操作,而无需显式指定每个目标索引或数据流的名称。以下是关于 _all 查询的详细说明: _all 查询概述 用途:_all 查询允许您在多个…

96,【4】 buuctf web [BJDCTF2020]EzPHP

进入靶场 查看源代码 GFXEIM3YFZYGQ4A 一看就是编码后的 1nD3x.php 访问 得到源代码 <?php // 高亮显示当前 PHP 文件的源代码&#xff0c;用于调试或展示代码结构 highlight_file(__FILE__); // 关闭所有 PHP 错误报告&#xff0c;防止错误信息泄露可能的安全漏洞 erro…

kamailio-ACC、ACC_JSON 和 ACC_RADIUS 的区别

ACC、ACC_JSON 和 ACC_RADIUS 的区别 ACC、ACC_JSON 和 ACC_RADIUS 都是 Kamailio 中用于计费&#xff08;Accounting&#xff09;的模块&#xff0c;但它们的功能和后端支持有所不同。以下是它们的区别及案例说明&#xff1a; 1. ACC 模块 功能&#xff1a;ACC 模块是 Kamai…