首页 > 解决方案 > Android Socket 连接到服务器但不写任何东西

问题描述

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

    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();
        }

标签: androidsocketsandroid-studioclient-serverserversocket

解决方案


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


推荐阅读