Java TCP客户端套接字。连接并等待输入流
我有一个wifi sd卡,在我用相机拍摄照片后,它会向我发送TCP包,其中包含有关内存中新图像的信息 在终端上,我可以用这个netcat命令读取输入流。netcat连接到ip 192.168.11.254并在端口5566上侦听。第二行是我接收的图像路径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那样接收输入流,什么也
$ 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