Python中如何实现端口通信的需求,有什么好的方法或脑洞建议?

1.先客户端安装一个东西(可以是一个软件,插件,或者直接在页面中),能够跟我服务器交互,并且能够接受我的服务器参数后,访问特定的网站(这个是重点,一点要能做 get 或 post 请求),最后把访问结果返回给我的服务器.
2.我目前做了一个 python 的 tcp 通信,并且用 pyinstaller 打包成 exe,但是给客户端使用的时候,出现两个问题,会被提示病毒,每次启动都要双击. 有什么什么好的方式能够解决.
3.有没有什么插件,或者在某个 web 中直接实现上述功能, 希望能够我一些参考,谢谢!
Python中如何实现端口通信的需求,有什么好的方法或脑洞建议?

11 回复

websocket


用Python搞端口通信,最直接的就是socket库,这是标准库里的基础网络工具。给你个简单的TCP例子:

import socket

# 服务端
def start_server(host='127.0.0.1', port=65432):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.bind((host, port))
        s.listen()
        print(f"服务端监听 {host}:{port}")
        conn, addr = s.accept()
        with conn:
            print(f"连接来自 {addr}")
            data = conn.recv(1024)
            print(f"收到: {data.decode()}")
            conn.sendall(b'Message received')

# 客户端
def start_client(host='127.0.0.1', port=65432):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.connect((host, port))
        s.sendall(b'Hello from client')
        data = s.recv(1024)
        print(f"收到回复: {data.decode()}")

# 运行示例
if __name__ == "__main__":
    from threading import Thread
    import time
    
    server_thread = Thread(target=start_server)
    server_thread.daemon = True
    server_thread.start()
    
    time.sleep(0.5)  # 等服务器启动
    start_client()

socket是底层实现,需要自己处理连接、数据收发和错误。如果要做更复杂的应用,可以考虑这些:

  1. asyncio + socket - 异步非阻塞,适合高并发连接
  2. socketserver模块 - 简化服务器创建,内置多线程/多进程支持
  3. 第三方库
    • websockets - WebSocket协议实现
    • aiohttp - 异步HTTP客户端/服务器
    • paramiko - SSH2协议实现
    • pyserial - 串口通信

选哪种取决于你的具体需求:简单本地通信用socket,Web应用考虑WebSocket,需要高并发就上asyncio

一句话:根据协议和并发需求选工具,socket是基础,高级场景用专门库。

webhook,你看看我的贴子有点类似,ifttt 触发服务发生指定数据到我的服务器,我服务器再把发送过来的数据发送到某一端,后面改下就可以,不知道你的具体需求

[更新] [1024 机器人大作战] [ bearychat_ifttt ] 双向 webhooks 服务,只有想不到没有做不到
https://www.v2ex.com/t/504155

用 websocket 的话,前端想请求地址的话,好像还要跨域操作

感谢,我现在参考一下

socket 通信,自己写协议,解析命令做对应操作

不是向两个服务器 post/get 的过程吗?还是我理解的有问题?为啥要用到 websocket 之类。。
一段 javascript 不就搞定了?顶多再解决一下跨域访问问题。

请问 js 能解决 在客户端时刻接受服务器发来的信息,解析得到目标 url,然后客户端访问 url 并把访问结果带回服务器么

恩恩,这个已经实现了,只是打包 exe 的时候会被认为是病毒

添加到例外里面就行了

回到顶部