tcp端口在java中接收较慢的数据,但在php中接收较快

tcp端口在java中接收较慢的数据,但在php中接收较快,java,performance,sockets,networking,Java,Performance,Sockets,Networking,我正在用java制作一个监听器并使用线程。它工作并接收数据, 但是对于这个特定的侦听器,它接收数据的速度非常慢。我不理解这一点,因为这个Java监听器对另一个客户机的工作速度非常快,当我对同一个源代码使用PHP编写的监听器时,它接收数据的速度非常快。为什么会有这种速度差 使用参数 通过客户端以字节数组发送数据 (实际数据为十六进制,转换成字节数组,由客户端发送) 为什么我的java代码总是很慢 我在这方面花了很多时间,发现这个JAVA侦听器对于跟踪设备来说速度很慢 但它适用于为define端口和

我正在用java制作一个监听器并使用线程。它工作并接收数据, 但是对于这个特定的侦听器,它接收数据的速度非常慢。我不理解这一点,因为这个Java监听器对另一个客户机的工作速度非常快,当我对同一个源代码使用PHP编写的监听器时,它接收数据的速度非常快。为什么会有这种速度差

使用参数
通过客户端以字节数组发送数据
(实际数据为十六进制,转换成字节数组,由客户端发送)

为什么我的java代码总是很慢

我在这方面花了很多时间,发现这个JAVA侦听器对于跟踪设备来说速度很慢 但它适用于为define端口和ip发送数据的临时客户端。 但对于跟踪设备PHP监听器是快速的,我不明白这一点 为什么这个跟踪器会有速度差 请帮忙

我的代码:

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.ClassNotFoundException;
import java.lang.Runnable;
import java.lang.Thread;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.*;
import java.io.*;
import java.net.*;
import java.util.StringTokenizer;
import java.util.Calendar;
import java.util.Date;
import java.util.Arrays;
import java.util.logging.Logger;
import java.util.logging.Level;
import java.text.DecimalFormat;
import pack.*;
import java.lang.String;
import second.*;

public class ServerSocketExample {
    private ServerSocket server;
    private int port = 3333;

    public ServerSocketExample() {
        try {
            server = new ServerSocket(port);
        } catch(IOException e) {
            System.out.println("errore on port");
            e.printStackTrace();
        }
    }

    public static void main(String[]args) {
        ServerSocketExample example = new ServerSocketExample();
        example.handleConnection();
    }

    public void handleConnection() {
        System.out.println("Waiting for client message...");

        //
        // The server do a loop here to accept all connection initiated by the
        // client application.
        //
        while (true) {
            try {
                Socket socket = server.accept();
                new ConnectionHandler(socket);
            }
            catch(IOException e) {

                e.printStackTrace();
            }
        }
    }
}


在黑暗中拍摄几张照片

不久前,我为一家在台式机上使用PC、Mac和*NIX的公司编写了一些excel工具,并注意到我在excel和数据服务器之间的较大数据传输在某些机器上持续超时,但在其他任何地方都可以正常工作。我所见过的唯一一种模式是,老版本的Windows vista和以前的Windows版本在大多数情况下似乎都有问题,而vista的更高版本和更高版本的Windows通常都很好


还要确保您的同事在尝试处理在线报告时,没有运行bit torrent客户端在Warp 10上下载1080i版《辛普森一家》的每一集

尝试增大套接字输入缓冲区。

您没有缓冲
输入流。这在某些设置中可能是问题,也可能不是问题,这取决于许多因素

但是试一下:

InputStream in = socket.getInputStream();
DataInputStream dis = new DataInputStream(new BufferedInputStream(in));
你可以试试这个:

  • 在每次println()之后调用System.out.flush(),因为Java/SO可以缓冲输出,这可能是傻瓜的陷阱,因为事情看起来比实际慢
  • 不要为每个套接字创建线程,而是使用
  • 设计您的协议,以便在消息以短周期分隔时,客户端可以重用连接

有些代码片段非常有用,因此不允许名称调用——称之为“特殊”数据…:)您是否已验证,不同客户端和服务之间的网络速度不同不会导致此问题,特别是当您有多个部署主机时?很容易漏掉这样明显的东西……一个想法是:这可能是一种愚蠢的读取方式(即每个字节单独读取或诸如此类),而不是读取更大的块或缓冲数据流。但是是的,请出示你的阅读密码。没有密码,模糊的故事。。请重新表述这个答案!?
InputStream in = socket.getInputStream();
DataInputStream dis = new DataInputStream(new BufferedInputStream(in));