【问题标题】:My client program is accepting only one byte from the server using python socket api我的客户端程序使用 python socket api 只接受来自服务器的一个字节
【发布时间】:2019-09-07 09:14:35
【问题描述】:

我正在尝试从 CNC HAAS 控制器获取机器数据。它有一个称为 MDC 的内置软件,它充当服务器。我需要编写一个客户端程序来向 MDC 的 IP 和端口号发送请求。当我发送一个请求并接收它时,似乎服务器一次发送一个字节,所以我一次只能捕获一个字节,其他的就丢失了。如何获取全部数据。我正在使用 Python 的 socket 模块。

根据 Stack Overflow 上的一个问题,我使用了一个 while 循环,但似乎服务器正在发送数据并关闭连接,当我的客户端程序再次循环时,其他数据已丢失并且连接已关闭。

# Import socket module 
import socket  
# Create a socket object 
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)          

# Define the port on which you want to connect 
port = 5051                

# connect to the server on local computer 
s.connect(('192.168.100.3', port)) 

#sending this message will give me the status of the CNC machine


s.send(("?Q500").encode()) 



d= (s.recv(1024)).decode() 


print(d)
s.close()

预期的输出是:

>PROGRAM, MDI, IDLE, PARTS, 380

我得到的输出是 > ,它只是实际输出的第一个字符(字节)。

【问题讨论】:

    标签: python sockets python-sockets cnc


    【解决方案1】:

    更多代码会有所帮助,但我会尽力帮助您提供给我们的内容

    你可以试试这个

    s.send(("?Q500").encode("utf-8")) # just add an encoding
    
    fullData = ""
    
    while True:
        d = (s.recv(1024)).decode("utf-8")
        fullData += d
    
        if not d:
            print(fullData)
            s.close()
            break
    

    【讨论】:

    • 如果你想了解更多我强烈推荐senddex的socket教程
    • 感谢您的快速回复,但是第二次进入循环后它卡住了,我认为它无法连接到机器,bcz服务器似乎已经关闭了连接并且可能剩余的数据是发送和丢失。我不知道这可能有什么帮助,但我对 PUTTY 软件做了同样的事情,我只需输入 ?Q500 并在终端中返回完整的消息。我尝试查看 putty 的源代码,因为我是编程新手,这对我来说有点乱。我已经在这里输入了完整的程序。只需连接、发送和接收。就是这样
    猜你喜欢
    • 2015-06-09
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多