套接字服务器/客户端有两个Android设备 [英] Socket Server/Client with two Android devices

查看:126
本文介绍了套接字服务器/客户端有两个Android设备的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我有一个平板电脑,我想基本上是让一个TCP(或UDP)套接字服务器等等多部手机可以发送数据给它。我也希望能够发送响应回电话。我至今不工作是什么?

服务器:

  Log.i(服务器,启动服务器......);
                尝试 {
                    ServerSocket的SS =新的ServerSocket(8080);
                    Log.i(服务器,服务器状态+ ss.isBound());
                    而(真){
                        //服务器等待客户这里,如果需要的话
                        插座S = ss.accept();
                        Log.i(服务器,服务器接受连接:+ s.isConnected());
                        BufferedReader中输入=新的BufferedReader(新的InputStreamReader(s.getInputStream()));
                        PrintWriter的输出=的新PrintWriter(s.getOutputStream(),TRUE); //自动刷新
                        Log.i(服务器,初始化输入和输出);
                        弦ST = input.readLine();
                        Log.i(服务器,从客户端:+ ST);
                        output.println(再见,感谢所有的鱼:));
                    }

                }赶上(UnknownHostException异常E){
                    // TODO自动生成的catch块
                    e.printStackTrace();
                }赶上(IOException异常E){
                    // TODO自动生成的catch块
                    e.printStackTrace();
                }
 

和客户端(手机):

 尝试{
                    插座S =新的Socket(192.168.0.106,8080);

                    //输出流重定向到插座
                    的OutputStream出= s.getOutputStream();

                    PrintWriter的输出=的新PrintWriter(出);
                    output.println(你好Android的!);
                    BufferedReader中输入=新的BufferedReader(新的InputStreamReader(s.getInputStream()));
                    //读线(S)
                    弦ST = input.readLine();
                    tv.setText(ST);
                    //关闭连接
                    S.CLOSE();


                }赶上(UnknownHostException异常E){
                    // TODO自动生成的catch块
                    e.printStackTrace();
                }赶上(IOException异常E){
                    // TODO自动生成的catch块
                    e.printStackTrace();
                }
 

解决方案

有可能是您的客户端不刷新的println

尝试要么在构造函数中指定自动冲洗

  PrintWriter的输出=的新PrintWriter(满分,真);
 

或手动添加下面冲洗打印

  output.println(你好Android的!);
output.flush();
 

So I have a tablet and I want to basically make it a TCP (or UDP) Socket Server so multiple phones can send data to it. I also want to be able to send responses back to the phones. What I have so far isn't working...

Server:

Log.i("Server", "Starting server...");
                try {
                    ServerSocket ss = new ServerSocket(8080);
                    Log.i("Server", "Server status: " + ss.isBound());
                    while(true){
                        //Server is waiting for client here, if needed
                        Socket s = ss.accept();
                        Log.i("Server", "Server is accepting connections: " + s.isConnected());
                        BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
                        PrintWriter output = new PrintWriter(s.getOutputStream(),true); //Autoflush
                        Log.i("Server", "Initialized input and output");
                        String st = input.readLine();
                        Log.i("Server", "From client: "+st);
                        output.println("Good bye and thanks for all the fish :)");
                    }

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

And client (phone):

try {
                    Socket s = new Socket("192.168.0.106", 8080);

                    //outgoing stream redirect to socket
                    OutputStream out = s.getOutputStream();

                    PrintWriter output = new PrintWriter(out);
                    output.println("Hello Android!");
                    BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
                    //read line(s)
                    String st = input.readLine();
                    tv.setText(st);
                    //Close connection
                    s.close();


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

解决方案

It is likely that your client is not flushing the println

Try either specifying autoflush in your constructor

PrintWriter output = new PrintWriter(out, true);

or manually adding a flush below your print

output.println("Hello Android!");
output.flush();

这篇关于套接字服务器/客户端有两个Android设备的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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