Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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
套接字客户端-服务器(android)_Android_Sockets_Chat - Fatal编程技术网

套接字客户端-服务器(android)

套接字客户端-服务器(android),android,sockets,chat,Android,Sockets,Chat,对不起我的英语。我正在尝试创建客户端和服务器。现在,我的逻辑是这样的: 我启动应用程序->启动服务器->服务器侦听所有消息->如果客户端向服务器发送消息->消息将转到服务器->服务器收到的消息->服务器需要向其所有客户发送消息 但服务器不这样做 **服务器需要向其所有客户发送消息** 或许 客户端未在侦听服务器 我的问题:为什么客户端不接受来自服务器的消息 //Main //send message btn.setOnClickListener(new View.OnClick

对不起我的英语。我正在尝试创建客户端和服务器。现在,我的逻辑是这样的:

启动应用程序->启动服务器->服务器侦听所有消息->如果客户端向服务器发送消息->消息将转到服务器->服务器收到的消息->服务器需要向其所有客户发送消息

但服务器不这样做

**服务器需要向其所有客户发送消息**

或许

客户端未在侦听服务器

我的问题:为什么客户端不接受来自服务器的消息

//Main

//send message
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (sendText.getText().toString().equals("")) {
                    return;
                }

                if(chatClientThread==null){
                    return;
                }

                chatClientThread.sendMsg(sendText.getText().toString() + "\n");
            }
        });

         //method create server and client, cliend connect to server
        createServer(port);
    }

    public void createServer(int port) {
        //create server
        ChatServerThread chatServerThread = new ChatServerThread(port);
        chatServerThread.start();

        //subscribe to server 192.168.31.101 - ip server
        createClient("Testov", "192.168.31.101", port);
    }

//method for create client
 public void createClient(String name, String ipAdress, int SocketServerPORT) {
        chatClientThread = new ChatClientThread(
                name, ipAdress, SocketServerPORT);
        chatClientThread.start();
    }


//this is server class
private class ChatServerThread extends Thread {

        int SocketServerPORT;

        public ChatServerThread(int SocketServerPORT) {
            //set port
            this.SocketServerPORT = SocketServerPORT;
        }


        @Override
        public void run() {
            Socket socket = null;
            DataInputStream dataInputStream = null;
            DataOutputStream dataOutputStream = null;

            try {
                //create server socket
                serverSocket = new ServerSocket(SocketServerPORT);
                //waite connect
                socket = serverSocket.accept();

                Log.e("connect", "server side");

                //for input and output
                dataInputStream = new DataInputStream(socket.getInputStream());
                dataOutputStream = new DataOutputStream(socket.getOutputStream());

                //listener
                while(true) {
                    if (dataInputStream.available() > 0) {
                        //read line
                        String newMsg = dataInputStream.readUTF();
                        //send line to client
                        dataOutputStream.writeUTF(newMsg);

                        final String ms = newMsg;
                        MainActivity.this.runOnUiThread(new Runnable() {

                            @Override
                            public void run() {
                                Toast.makeText(getApplicationContext(), ms, Toast.LENGTH_SHORT).show();
                            }
                        });

                        //end thread
                        dataOutputStream.flush();
                    }
                }

            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (socket != null) {
                    try {
                        socket.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
    }

//this is client side

private class ChatClientThread extends Thread {

    Socket socket = null;
    DataOutputStream dataOutputStream = null;
    DataInputStream dataInputStream = null;

    String name;
        String dstAddress;
        int dstPort;

        String msgToSend = "";
        boolean goOut = false;
        String msgLog = "";

        ChatClientThread(String name, String address, int port) {
            this.name = name;
            dstAddress = address;
            dstPort = port;
        }

        @Override
        public void run() {

            try {
                //set ip adress and port
                socket = new Socket(dstAddress, dstPort);

                //for get and post data
                String mesageFromServer = null;
                dataInputStream = new DataInputStream(socket.getInputStream());

                while(!goOut) {
                        //wait message from server
                        mesageFromServer = dataInputStream.readUTF();
                        //output
                         Log.e("client", mesageFromServer);

                        final String ms = mesageFromServer;
                        MainActivity.this.runOnUiThread(new Runnable() {

                            @Override
                            public void run() {
                                Toast.makeText(getApplicationContext(), ms, Toast.LENGTH_SHORT).show();
                            }
                        });

                         msgToSend = "";
                }


            } catch (UnknownHostException e) {
                e.printStackTrace();
                final String eString = e.toString();
                MainActivity.this.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this, eString, Toast.LENGTH_LONG).show();
                        Log.e("errror", eString);
                    }

                });
            } catch (IOException e) {
                e.printStackTrace();
                final String eString = e.toString();
                MainActivity.this.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this, eString, Toast.LENGTH_LONG).show();
                        Log.e("errror", eString);
                    }

                });
            } finally {
                if (socket != null) {
                    try {
                        socket.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

                if (dataOutputStream != null) {
                    try {
                        dataOutputStream.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

                if (dataInputStream != null) {
                    try {
                        dataInputStream.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

            }

        }

        private void sendMsg(String msg){
            try {
                dataOutputStream = new DataOutputStream(socket.getOutputStream());
                dataOutputStream.writeUTF(msg);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        private void disconnect(){
            goOut = true;
        }
    }

请用大写字母、标点符号和反格式化这些乱七八糟的东西,然后告诉我们你的问题是什么,@EJP好的,现在我来解决this@EJP我更新我的Qestion您的服务器实现将只支持一个客户端,如果该客户端断开连接,您的服务器将崩溃。这种常见模式为每个客户端使用一个单独的线程,因此您的循环中应该有accept()调用,当有人连接您时,您将新套接字发送到将管理它的线程,同时一直等待新客户端,还请记住,这种方式只能在接收之前发送。@Nanoc谢谢您的建议,我会尝试