无法使用BufferedReader / Writer在套接字上发送和接收数据 [英] Cannot send and receive data using BufferedReader/Writer on sockets

查看:332
本文介绍了无法使用BufferedReader / Writer在套接字上发送和接收数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在制作一个客户端 - 服务器应用程序,并使用以下代码在服务器和客户端之间交换数据。

I am making a client-server application and am using the following code for the exchange of data b/w the server and clients.

服务器的发送和接收代码:

Server's send and receive code:

public void run() {
     try {
        BufferedReader input = new BufferedReader(new InputStreamReader(socketNew.getInputStream()));
        String message=input.readLine();
        while(message.length()!=0)
        {
            for(Socket s:socs) //socs is a list containing all the connected sockets
            {
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                writer.write(message);
            }
        }

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

  }

客户的发送方法:

private void send_data() {

    BufferedWriter writer;
    try {
        writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        writer.write(this.name+textField.getText());
        textField.setText("");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

客户接收方式:

public  void receive_data(){
    BufferedReader input;
    try {
        input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String message=input.readLine();
        while(message.length()!=0)
        {console(message);}
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}



我没有任何数据交换b / w服务器和客户端。有人帮我吗?

I am not having any data exchange b/w the server and the clients.Can someone help me please?

推荐答案

一个缓冲区,可能从来没有发送过。刷新写入程序以确保它发送数据:

You are suffering from buffering: message is written in a buffer and probably never sent. Flush the writer to ensure it sends data:

    writer.write(...);
    writer.flush();

此外,BufferedReader.readLine读取行。行必须以换行符结束,例如 \\\

Also, BufferedReader.readLine reads lines. Lines have to be terminated with a line break, such as \n. It's not clear if you are sending line breaks.

此外,这是一个无限循环:

Also, this is an infinite loop:

    String message=input.readLine();
    while(message.length()!=0) {
        /* code that does not modify message */
    }

这篇关于无法使用BufferedReader / Writer在套接字上发送和接收数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆