Android Socket连接到服务器但未写入任何内容

时间:2018-07-04 20:51:07

标签: android sockets android-studio client-server serversocket

我当前正在Eclipse上运行服务器(本地IP 192.168.1.255,正在侦听端口4567)。客户端可以连接服务器套接字并发送消息,这些消息将由服务器打印在终端上。 服务器代码的一部分如下:

    System.out.println("Client connected: " + clientName);
    String line;

    while (true){
        line = in.nextLine();
        System.out.println("STRING RECEIVED: " + line + " FROM " + clientName);
    }

其中 in 是客户端套接字的输入流。

部分客户代码是:

    while(true) {
        System.out.print("\nEnter your input: ");
        line = stdin.next();
        socketOut.println(line);
        socketOut.flush();
    }

因此,例如,连接两个客户端的服务器终端上的可能输出如下:

    Client connected: Socket[addr=/192.168.1.225,port=54852,localport=4567]
    STRING RECEIVED: Hello FROM Socket[addr=/192.168.1.225,port=54852,localport=4567]
    STRING RECEIVED: World FROM Socket[addr=/192.168.1.225,port=54852,localport=4567]
    Client connected: Socket[addr=/192.168.1.225,port=54945,localport=4567]
    STRING RECEIVED: Hello2 FROM Socket[addr=/192.168.1.225,port=54945,localport=4567]

一切正常,因此我现在正尝试在Android Studio上开发的简单应用程序上访问服务器槽式插槽。代码是:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new BackgroundTask().execute();

    }

    private class BackgroundTask extends AsyncTask {

        @Override
        protected Object doInBackground(Object[] params) {

            try {
                Socket socket = new Socket("10.0.2.2", 4567);
                PrintWriter out = new PrintWriter(socket.getOutputStream());
                out.println(new String("Hi from Android!"));

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

            return null;
        }
    }
}

但是输出只是

    Client connected: Socket[addr=/192.168.1.225,port=55001,localport=4567]

没别的。

关于 println 的任何建议都不会发送任何东西吗?该程序在Eclipse的客户端/服务器端均可完美运行,因此我猜问题出在Android上。另外,我启用了Android网络权限,因此连接应该可以正常工作。

预先感谢大家。

编辑:已解决,我刚刚将Android客户端代码更改为:

            try {
            Socket socket = new Socket("10.0.2.2", 4567);
            if (socket.isConnected()) {
                PrintWriter out = new PrintWriter(new BufferedWriter(
                        new OutputStreamWriter(socket.getOutputStream())), true);
                String line = new String("Hi from Android!");
                out.println(line);
            }

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

1 个答案:

答案 0 :(得分:0)

您需要刷新PrintWriter或将其构造为自动刷新。默认情况下不是。