TCP服务器:如何让服务器等待客户端连接

时间:2017-10-28 15:57:18

标签: java android tcp

我正在尝试为我的Android应用程序构建一个简单的TCP服务器。这是我的代码:

public class TCPServer extends Thread{
    int port;
    String result;
    ServerSocket serverClient;
    TextView tv5;
    MainActivity at;
    public TCPServer(int newPort,MainActivity at) {
        this.port=newPort;
        this.at=at;
        try{
            serverClient=new ServerSocket(port);
        }catch(IOException e) {
            e.printStackTrace();
        }
    }
    public void run() {
        tv5=(TextView)at.findViewById(R.id.textView5);
        Socket s;
        try {
            while (true) {
                s= serverClient.accept();
                BufferedReader inFromClient =
                        new BufferedReader(new InputStreamReader(s.getInputStream()));
                this.result = inFromClient.readLine();
                tv5.setText(this.result);
                s.close();
            }
        }catch(IOException e) {
            e.printStackTrace();
        }
    }
    public String getResult() {
        return this.result;
    }
    public void setResult(String s){
        this.result=s;
    }
    public void TCPclose(){
        try {
            serverClient.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

当有人按下按钮时它会调用:

receive_data.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                    receiveResult.start();
                    tv5.setText(receiveResult.getResult());
            }
        });

但似乎它可以达到这条线:

s= serverClient.accept();

它在那条线之前被卡住了。我想也许没有客户端连接到服务器,所以我尝试为服务器编写代码等待客户端,但它不起作用。这是我的尝试:

public class TCPServer extends Thread{
        int port;
        String result;
        ServerSocket serverClient;
        TextView tv5;
        MainActivity at;
        public TCPServer(int newPort,MainActivity at) {
            this.port=newPort;
            this.at=at;
            try{
                serverClient=new ServerSocket(port);
            }catch(IOException e) {
                e.printStackTrace();
            }
        }
        public void run() {
            tv5=(TextView)at.findViewById(R.id.textView5);
            Socket s;
            try {
                while (true) {
                    Thread.sleep(10)
                    s= serverClient.accept();
                    BufferedReader inFromClient =
                            new BufferedReader(new InputStreamReader(s.getInputStream()));
                    this.result = inFromClient.readLine();
                    tv5.setText(this.result);
                    s.close();
                }
            }catch(IOException e) {
                e.printStackTrace();
            }
        }
        public String getResult() {
            return this.result;
        }
        public void setResult(String s){
            this.result=s;
        }
        public void TCPclose(){
            try {
                serverClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

但它不起作用。有人能告诉我哪里错了。谢谢。抱歉我的英语不好。

0 个答案:

没有答案