Java套接字和dataoutputstream延迟

Java套接字和dataoutputstream延迟,java,sockets,dataoutputstream,Java,Sockets,Dataoutputstream,我是一名Java初学者,正在从事一个涉及套接字和外部设备的项目。 我为这些装置做了一个小型侦听器,我在向这些装置发送消息时遇到了一些问题 该装置有2条消息正在发送到服务器: 1.女巫的心跳信息是十六进制的 2.实际数据是一个字符串,看起来像:field1、field2、field3、field4 侦听器正在为每个设备打开一个新线程,并正在等待消息。 我使用DataInputStream接收消息,使用DataOutputStream发送消息。每次一个设备连接到服务器时,它都会打开一个新的线程并获取

我是一名Java初学者,正在从事一个涉及套接字和外部设备的项目。 我为这些装置做了一个小型侦听器,我在向这些装置发送消息时遇到了一些问题

该装置有2条消息正在发送到服务器: 1.女巫的心跳信息是十六进制的 2.实际数据是一个字符串,看起来像:field1、field2、field3、field4

侦听器正在为每个设备打开一个新线程,并正在等待消息。 我使用DataInputStream接收消息,使用DataOutputStream发送消息。每次一个设备连接到服务器时,它都会打开一个新的线程并获取心跳,从心跳中我知道什么类型的设备以及它是谁。如果设备是新的,我将根据2个唯一的序列配置它,该单元知道要发送给我,我必须将它们与数据库进行比较

我的问题是在我要求设备提供2个序列的部分。这需要30到40秒的时间。发送命令的时间必须少于10秒(在另一个tcp服务器上测试)

这是代码的一部分:

String [] commands = deviceDetails.getConfigCommands().split(";"); // I take the commands from a file, and looks like: command1;command2
for (int i=0; i<commands.length; i++) {
sendCommand = commands[i].getBytes(); // sendCommand is a byte[]
out.write(sendCommand);
out.flush();

loop: while (true) {
    in.read(buffer); // buffer is a byte[]
    String[] result = new String(buffer, "ASCII").split(":|="); // the response from the unit looks like: ok:commandname=code, i need the code

    if (configCounter ==2 && imei.equals("")) {
        i = 0;
        break loop;
    } else if(configCounter == 2 && simid.equals("")) {
        i = 1;
        break loop;
    }
    configCounter++;

    switch (result[1]) {
        case "IMEI":
            imei = result[2];
            break loop;

        case "SIMID":
            simid = result[2];
            break loop;
    }
}
String[]commands=deviceDetails.getConfigCommands().split(“;”)//我从一个文件中获取命令,看起来像:command1;命令2

对于(int i=0;我怀疑您的接收器正在等待一行文本,例如新行或其他不同的内容,并且正在超时。无缓冲的DataOutputStream写入应该不到10微秒。我已尝试发送命令和新行,但结果相同。感谢您的兴趣和想法。您忽略了c由
read()
返回的ount。如果它是-1,则对等方已关闭连接,您必须关闭此套接字并退出循环。如果它小于预期的消息长度,则需要围绕
read()循环
打电话,收集更多的信息,直到信息完整为止,无论你的协议中有什么含义。是的,这是真的,但即使我删除了while并尝试只发送一个commad,我也会有同样的延迟。谢谢!我解开了这个谜,我必须在每个命令后添加一个回车。谢谢彼得·劳瑞的指导和提示。谢谢大家或者你的答复。