m0_74975953 2024-09-07 13:25 采纳率: 0%
浏览 15

python:TCP连接报错[WinError 10054] 远程主机强迫关闭了一个现有的连接,如何解决?

我想通过python和unity建立tcp通信发送摄像头捕获的一帧帧图片,这样unity就不用调用摄像头和python端起冲突了。但是出现了[WinError 10054] 远程主机强迫关闭了一个现有的连接。我unity的服务器端也开了,但还是报错。代码是抄的原帖:https://blog.csdn.net/zouxin_88/article/details/117325268

import os, sys, time
import socket
import cv2
import numpy

# 建立图像读取对象
capture = cv2.VideoCapture(0)
# 读取一帧图像,读取成功:ret=1 frame=读取到的一帧图像;读取失败:ret=0
ret, frame = capture.read()
# 压缩参数,后面cv2.imencode将会用到,对于jpeg来说,15代表图像质量,越高代表图像质量越好为 0-100,默认95
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 70]


def main():
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    try:
        client.connect(("127.0.0.1", 49667))
    except socket.error as e:
        print("Address-related error connecting to server: %s" % e)


    while True:
        ret, frame = capture.read()
        cv2.imshow("capture", frame)
        if (cv2.waitKey(10) & 0XFF) == ord('q'):
            client.close()
            break
        result, imgencode = cv2.imencode('.jpg', frame, encode_param)
        # 建立矩阵
        data = numpy.array(imgencode)
        # 将numpy矩阵转换成字符形式,以便在网络中传输
        stringData = data.tostring()

        # 先发送要发送的数据的长度
        # ljust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串
        print(len(stringData))
        strlen = str(len(stringData)).ljust(16)
        client.send(bytes(strlen, 'UTF-8'))
        # 发送数据
        client.send(stringData)
        time.sleep(0.01)


    client.close()
    cv2.destroyAllWindows()
    capture.release()

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-07 13:26
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    根据你提供的代码和描述,你在使用TCP进行通信时遇到了 [WinError 10054] 错误,该错误提示“远程主机强迫关闭了一个现有的连接”。这通常意味着在另一端(Unity服务器端)关闭了连接。解决这个问题可能需要从以下几个方面入手:

    1. 检查Unity服务器端代码

    首先,确保Unity服务器端的代码正确无误,并且确实在监听指定的端口(例如你的Python客户端尝试连接的 127.0.0.1:49667)。此外,确保Unity服务器能够正确处理接收到的数据,并且不会因为某种原因(如超时、错误处理等)而主动关闭连接。

    2. 检查网络环境和防火墙设置

    确保你的网络环境没有阻止TCP连接。有时,防火墙或安全软件可能会阻止网络连接,导致远程主机关闭连接。检查你的防火墙设置,确保Python和Unity之间的通信没有被阻止。

    3. 检查Python客户端代码

    在你的Python代码中,检查以下几点:

    • 连接建立: 确保你在发送数据之前成功建立了与Unity服务器的连接。如果在尝试连接时发生错误,确保Unity服务器正在运行并且监听正确的端口。
    • 数据处理和发送: 检查你的数据处理和发送逻辑是否正确。例如,确保你在发送数据之前已经正确编码图像数据,并且发送的数据长度是正确的。
    • 异常处理: 在发送数据时添加异常处理逻辑,以便在发生错误时进行调试。这样可以帮助你更好地了解问题的来源。

    4. 确认接收端的状态和响应

    如果可能的话,调试Unity服务器端的代码,确认它是否正确地接收到了连接请求和数据。如果服务器在处理数据时有错误或异常,它可能会关闭连接。

    5. 调整TCP参数和超时设置

    有时,TCP连接的超时设置可能会导致连接被远程主机关闭。你可以尝试调整这些参数,看看是否能解决问题。

    总结和调试步骤

    • 确认Unity服务器端代码无误并且正常运行。
    • 检查Python客户端代码中的网络连接和数据发送逻辑。
    • 检查网络环境和防火墙设置。
    • 添加异常处理和调试日志输出,帮助定位问题。
    • 如果问题依然存在,尝试调整TCP参数和超时设置。

    如果你能提供更多关于Unity服务器端代码的信息,或者具体的错误日志,我可能能更精确地帮助你解决问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月7日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?