Python 远程主机强迫关闭了一个现有的连接

  1. 编译代码如下
  2. import socket
    
    target_host = "127.0.0.1"
    target_port = 8099
    
    client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # No status protocol, not need to connected
    client.sendto("AABBCC".encode(), (target_host, target_port))
    
    data, addr = client.recvfrom(4096)
    
    print(data)
  3. 出现错误如下:
    C:Python36python.exe G:/PythonProjects/Tacker/part1/UDP_Client.py
    Traceback (most recent call last):
    File "G:/PythonProjects/Tacker/part1/UDP_Client.py", line 10, in <module>
    data, addr = client.recvfrom(4096)
    ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。

    Process finished with exit code 1

  4. 两个问题:
  • 一个如上:猜测是没有开启端口监听所致,尝试了nc,但是win10下的一个无法解析nc命令,另一个下的nc打开后又秒关,尝试了子系统ubuntu后貌似工作,但不回显。。
  • 第二个问题就是为什么会出现 远程主机强迫关闭了一个现有连接这种中文报错,不应该是remote host forced closed an occoured connection 这种英文式的报错么? 中文报错查起来很不舒服,哪位大佬知道怎么修改么?
阅读 17.6k
2 个回答

我并不是很明白你意思,你的socket用法我很费解。给你提供一个服务端和客户端的demo吧。
server.py

import socket
if "__main__" == __name__:

    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        print("create socket succ!")

        sock.bind(('localhost', 8002))
        print("bind socket succ!")
        sock.listen(5)
        print("listen succ!")

    except Exception as e:
        print e
        print("init socket err!")

    while True:
        print("listen for client...")
        conn, addr = sock.accept()
        print("get client")
        print(addr)

        conn.settimeout(5)
        szBuf = conn.recv(1024)
        print("recv:" + szBuf)

        if "0" == szBuf:
            conn.send('exit')
        else:
            conn.send('welcome client!')

        conn.close()
        print("end of sevice")
        
        

client.py

import socket

if "__main__" == __name__:
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(('localhost', 8002))

    # sock.sendto("0", ('localhost', 8002))
    sock.send('0')

    szBuf = sock.recv(1024)
    print("recv " + szBuf)
    sock.close()
    print("end of connect")

先运行server.py监听本地8002端口,再运行client.py发送信息。服务端对接收到的信息怎么处理,你可以自己修改。

新手上路,请多包涵

请问你遇到的: “[WinError 10054] 远程主机强迫关闭了一个现有的连接”,解决了吗,如果解决的话请问你是怎么解决的,我遇到了和你一样的错误。我的邮箱:1779667359@qq.com。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题