Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bufferwriter不适用于java服务器和android客户端_Java_Android - Fatal编程技术网

bufferwriter不适用于java服务器和android客户端

bufferwriter不适用于java服务器和android客户端,java,android,Java,Android,大家好,我正在用android开发一个聊天应用程序,为此我用java开发了一个服务器来路由消息。系统的工作方式是,连接到服务器后,客户端将其id发送到服务器。现在我遇到的问题是,有时服务器从客户端接收到id,而大多数时候服务器没有接收到id。请帮助我,我不知道为什么会出现这种情况 服务器的代码 System.out.println("server starting at port: "+ portnumber); serverSocket = new ServerSocket(portnumbe

大家好,我正在用android开发一个聊天应用程序,为此我用java开发了一个服务器来路由消息。系统的工作方式是,连接到服务器后,客户端将其id发送到服务器。现在我遇到的问题是,有时服务器从客户端接收到id,而大多数时候服务器没有接收到id。请帮助我,我不知道为什么会出现这种情况

服务器的代码

System.out.println("server starting at port: "+ portnumber);
serverSocket = new ServerSocket(portnumber);
while(true){
    System.out.println("waiting for client# "+ clientno);

    //connecting to client's call
    Socket socket = serverSocket.accept();
    System.out.println("Client# "+ clientno +" connected!!!");
    //recieving clients name
    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    int idOfClient = br.read();
    System.out.println("" + idOfClient);
}
和客户端的代码

public class MainActivity extends Activity {
    private static final String TAG = "ChatActivity";

    private static final String hostname="192.168.0.100";
    private static final int portnumber=60123;
    private ChatArrayAdapter chatArrayAdapter;
    private ListView listView;
    private EditText chatText;
    private Button buttonSend;
    private boolean side = false;
    private BufferedWriter bw;
    private BufferedReader br;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        buttonSend = (Button) findViewById(R.id.send);

        listView = (ListView) findViewById(R.id.msgview);

        chatArrayAdapter = new ChatArrayAdapter(getApplicationContext(), R.layout.right);
        listView.setAdapter(chatArrayAdapter);



        chatText = (EditText) findViewById(R.id.msg);
        chatText.setOnKeyListener(new View.OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
                    try {
                        return sendChatMessage();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                return false;
            }
        });
        Thread thread=new Thread(){
            public void run() {
                try {
                    chatArrayAdapter.add(new ChatMessage(!side, "Connecting to server"));
                    final Socket socket = new Socket(hostname, portnumber);
                    chatArrayAdapter.add(new ChatMessage(!side, "Connected to server"));

                    bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                    bw.write(2);
                    bw.newLine();
                    bw.flush();

                    br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    while(true) {
                        //if (br.ready()) {
                            //chatText.setText(br.readLine());
                            chatArrayAdapter.add(new ChatMessage(!side, br.readLine()));
                        //}
                    }
                } catch (Exception e) {


                }

            }
        };
        thread.start();


        buttonSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                try{
                sendChatMessage();
                }
                catch(Exception e){

                }
            }
        });

        listView.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
        listView.setAdapter(chatArrayAdapter);

        //to scroll the list view to bottom on data change
        chatArrayAdapter.registerDataSetObserver(new DataSetObserver() {
            @Override
            public void onChanged() {
                super.onChanged();
                listView.setSelection(chatArrayAdapter.getCount() - 1);
            }
        });


    }

    private boolean sendChatMessage() throws IOException {
        String msg=chatText.getText().toString();
        try {
            bw.write(msg);
            bw.newLine();
            bw.flush();
            chatArrayAdapter.add(new ChatMessage(side, msg));
        }
        catch(Exception e){
            chatArrayAdapter.add(new ChatMessage(side,"Message not sent"));
        }
        chatText.setText("");

        return true;
    }
}

尝试在打印完成后关闭bufferedReader,如下所示

int idOfClient=br.read();
System.out.println(""+idOfClient);
br.close();

您确定您的客户端有时不发送空值吗?如果在服务器代码中没有客户端未发送空值,客户端未发送任何内容,请检查它。有时客户端发送其id,但有时不发送