我正在编写简单的软件,PC是套接字服务器,android连接到它,然后我在PC上的键盘上写的任何东西,android得到它并只是记录。
Android代码: package com.example.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
Socket echoSocket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
echoSocket = new Socket("192.168.2.3", 4444);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));
} catch (UnknownHostException e) {
Log.e("j", "Don't know about host: JANIPC.");
System.exit(1);
} catch (IOException e) {
Log.e("j", "Can't connect to Jani-PC");
System.exit(1);
}
try {
BufferedReader stdIn = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
//out.println(userInput);
Log.e("j", "echo: " + in.readLine());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这是我的PC Java代码:
package jani.study.socketserver;
import java.io.*;
import java.net.*;
/**
*
* @author Jani
*/
public class Main {
public static void main(String[] args) throws IOException, InterruptedException {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(4444);
} catch (IOException e) {
System.err.println("Could not listen on port: 4444.");
System.exit(1);
}
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
} catch (IOException e) {
System.err.println("Accept failed.");
System.exit(1);
}
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(
System.in));
String inputLine;
System.out.println("Connected!");
/*while ((inputLine = in.readLine()) != null) {
out.println(inputLine);
}*/
Thread.sleep(1000);
out.println("1");
Thread.sleep(1000);
out.println("2");
Thread.sleep(1000);
out.println("3");
Thread.sleep(1000);
out.println("4");
Thread.sleep(1000);
out.println("5");
Thread.sleep(1000);
out.println("6");
out.close();
in.close();
clientSocket.close();
serverSocket.close();
}
}
在Android调试器中,我只收到每一秒请求,我的意思是,我只得到: 回声:2 回声:4 回声:6
我做错了什么?请帮忙答案 0 :(得分:2)
您正在使用两个BufferedReader
,一个in
和一个stdIn
都从套接字读取。您首先在while
循环中使用当前行,然后使用Log
语句中的下一行。
试试这个:
Log.e("j", "echo: " + userInput);
答案 1 :(得分:1)
您在阅读器中拨打readLine
两次,并仅将所有其他来电的结果打印到readLine
。你可能想要:
while ((userInput = stdIn.readLine()) != null) {
//out.println(userInput);
Log.e("j", "echo: " + userInput);
}