java - BufferedWriter.write() 似乎不起作用

标签 java android sockets bufferedwriter

我有两个 Java 应用程序,其中一个 Android 客户端连接到计算机上的服务器并使用 BufferedWriter 通过 websockets 发送消息。

客户端:

    try {
        toast("Sending...");
        Socket sock = new Socket(ip, PORT);
        OutputStream os = sock.getOutputStream();
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
        bw.flush();
        bw.write("Hello Server!");
        toast("Connected!");
    } catch (UnknownHostException e) {
        toast(e.getMessage());
    } catch (IOException e) {
        toast(e.getMessage());
    }

服务器:

public static void main(String[] args) {
    ServerSocket server;
    ConnectionThread ct;
    Socket s;
    ExecutorService es = Executors.newSingleThreadExecutor();
    try {
        System.out.println("Starting server...");
        server = new ServerSocket(1337);
        s = server.accept();
        ct = new ConnectionThread(s);
        es.execute(ct);
    } catch (IOException ex) {
        ex.printStackTrace();
    }       
}

ConnectionThread 类:

public class ConnectionThread implements Runnable {
    private Socket sock;
    private InputStream is;
    private BufferedReader br;
    private boolean online;
    public ConnectionThread(Socket s) {
        System.out.println("Creating connection thread.");
        this.sock = s;
        online = true;
    }
    @Override
    public void run() {
        String input = "";
        try {
            System.out.println("Starting to read...");
            is = sock.getInputStream();
            br = new BufferedReader(new InputStreamReader(is));

            while (online) {
                input = br.readLine();
                if(input != null){
                    System.out.print("Received message: ");
                    System.out.println(input);
                }

            }

            br.close();
            is.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

当我运行服务器,然后运行客户端时,客户端将显示“已连接!” toast,服务器的输出将是:

Starting server...
Creating connection thread.
Starting to read...

因此,似乎确实建立了连接,但消息并未到达。有人知道为什么会这样吗?

最佳答案

您的服务器需要一个由换行符终止的完整行。尝试:

bw.write("Hello Server!");
bw.newLine();

关于java - BufferedWriter.write() 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12917474/

相关文章:

java - Alfresco - 基于 Java 的 Webscript - 异步发送响应

android - 有什么简单的方法可以在编辑文本的第一行左侧添加空格

使用 Openshift 的 Java 套接字

android - C++ 服务器使用 TCP 向 Android 客户端发送消息

java - 如何通过单击主 Activity 中的自定义信息窗口来更改不同 Activity 中布局的 TextView

java - 如何打印出HTTP响应然后退出

java - 有没有办法在java中创建用户定义类类型的数组?

java - ArrayList 中的顶点缓冲区对象?

java - 如何将64位字符串转为256位AES加密的 key

android - 无法在 Android Studio 项目中引用导入的 jar 库