Java TCP客户端套接字。连接并等待输入流

Java TCP客户端套接字。连接并等待输入流,java,android,sockets,tcp,Java,Android,Sockets,Tcp,我有一个wifi sd卡,在我用相机拍摄照片后,它会向我发送TCP包,其中包含有关内存中新图像的信息 在终端上,我可以用这个netcat命令读取输入流。netcat连接到ip 192.168.11.254并在端口5566上侦听。第二行是我接收的图像路径 $ nc 192.168.11.254 5566 >/mnt/sd/DCIM/109_0302/IMGP0101.JPG 在我的应用程序上,我有一个连接到同一ip和端口的Java客户端套接字。但是我没有像netcat那样接收输入流,什么也

我有一个wifi sd卡,在我用相机拍摄照片后,它会向我发送TCP包,其中包含有关内存中新图像的信息

在终端上,我可以用这个netcat命令读取输入流。netcat连接到ip 192.168.11.254并在端口5566上侦听。第二行是我接收的图像路径

$ nc 192.168.11.254 5566
>/mnt/sd/DCIM/109_0302/IMGP0101.JPG
在我的应用程序上,我有一个连接到同一ip和端口的Java客户端套接字。但是我没有像netcat那样接收输入流,什么也没有发生

void startListenForTCP (){
    Thread TCPListenerThread = new Thread(new Runnable() {
        @Override
        public void run() {

            Boolean run = true;
            String serverMessage = null;
            InetAddress serverAddr = null;

            try {
                serverAddr = InetAddress.getByName("192.168.11.254");
                Socket clientSocket = new Socket(serverAddr, 5566);

                try{
                    BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

                    while (run) {
                        serverMessage = in.readLine();
                        mHandler.post(new DisplayToast(context, "TCP : " + serverMessage));
                    }

                } catch(UnknownHostException e) {
                    mHandler.post(new DisplayToast(context, "UnknownHostException"));

                } catch(IOException e) {
                    mHandler.post(new DisplayToast(context, "IOException"));
                } finally {
                    clientSocket.close();
                }

            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    });
    TCPListenerThread.start();
}
javadoc国家:

读一行文字。一条线路被视为由任何一条线路终止 换行符('\n')、回车符('\r')或回车符的 紧接着是换行符

如果卡没有发送某种类型的行尾,此方法将永远不会返回。尝试从
clientSocket.getInputStream()
读取directyl。这不做任何缓冲。

试试这个,可能会有用

第一步 删除这两行:

serverAddr = InetAddress.getByName("192.168.11.254");
Socket clientSocket = new Socket(serverAddr, 5566);
添加此行:

Socket clientSocket = new Socket("192.168.11.254", 5566);
步骤2 删除此代码:

try {
    BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    while (run) {
        serverMessage = in.readLine();
        mHandler.post(new DisplayToast(context, "TCP : " + serverMessage));
    }
}
try {
    char[] buffer = new char[2048];
    int charsRead = 0;
    BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    while ((charsRead = in.read(buffer)) != -1) {
        String message = new String(buffer).substring(0, charsRead);
        Log.e("In While", "msg :"+message);   
    }
}
添加此代码:

try {
    BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    while (run) {
        serverMessage = in.readLine();
        mHandler.post(new DisplayToast(context, "TCP : " + serverMessage));
    }
}
try {
    char[] buffer = new char[2048];
    int charsRead = 0;
    BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    while ((charsRead = in.read(buffer)) != -1) {
        String message = new String(buffer).substring(0, charsRead);
        Log.e("In While", "msg :"+message);   
    }
}

很好的解释。这就是我没有接受按摩的原因。Bash on liner是
echo-e”/mnt/sd/DCIM/1090302/IMGP0101.JPG\r“| nc 192.168.11.254 5566