【问题标题】:Communicating over a socket connection:通过套接字连接进行通信:
【发布时间】:2012-07-10 21:59:14
【问题描述】:

已完成的步骤:

我让服务器正在运行,在套接字 4444 上寻找连接。

我让 android 应用程序连接到套接字。

我让 android 应用程序通过套接字连接发送两个参数。

我让服务器消化这两个单独的参数并相应地处理它们。

当我尝试发回消息时,我的问题就开始了。

请你们帮我举一个客户端类和服务器类的例子,使用BufferedReaderPrintWriter将数据从客户端发送到服务器,在服务器端接受数据并返回数据客户端接收?

感谢您的帮助。

【问题讨论】:

    标签: java android sockets


    【解决方案1】:

    从套接字输出流创建一个新的 PrintWriter,

     PrintWriter writer = new PrintWriter(new BufferedOutputStream(socket.getOutputStream()));
     writer.write("blather");
     writer.flush();
    

    【讨论】:

    • 嗨,sbridges,我已经这样做了。但由于某种原因,要么我没有正确阅读客户端返回的消息,要么我没有正确发送它。我将整理我的代码并在几分钟后将其发布在这里。
    • 是的,谢谢 ;) 我只是忽略了关闭客户端的套接字。很傻!谢谢!
    【解决方案2】:


    有时不要使用读写器会导致问题,例如我们无法预测字符串的结尾等。所以请只写入或读取字节或字节数组。这是更好的方法。
    以下是示例编码sn-p

                         socket=new Socket(this.ipAddress,this.port_number);
    
                //socket.setSocketImplFactory(fac)
                Log.i(tagName, "after creating sokcet");
    
                os=socket.getOutputStream();
                is=socket.getInputStream();
    
                dos=new DataOutputStream(os);               
                Log.i(tagName, "after creating ouput streams");
    
                dis=new DataInputStream(is);
                Log.i(tagName, "after creating input streams");
    
                //dos.writeUTF(msg[i].trim());
                //dos.write(msg[i].trim().getBytes());
    
                //dos.writeUTF(msg[i].trim());
                dos.write(msg[i].trim().getBytes());
                //dos.writeUTF(str)
                dos.flush();
    
                Log.i(tagName, "after writing data to os");
    
                StringBuilder sbuilder=new StringBuilder();
    
                ///*
                int ch;
                byte bt=1;
                while((bt=(byte) dis.read())!=-1)
                {
                    Log.i(tagName, "ch="+bt);
                    byte temp[]=new byte[1];
                    //temp[0]=(byte)ch;
                    temp[0]=(byte)bt;
                    String tempStr1=new String(temp);
                    Log.i(tagName, "tempstr:"+tempStr1);
    
                    sbuilder.append(tempStr1);
    
                    Log.i(tagName, "Data fro server : "+sbuilder.toString());
                    tempStr1=null;
                }
                //*/
                //byte tt[]=new byte[dis.readLine()]
                //resultStr=dis.readLine();resultStr=resultStr.trim();
                resultStr=sbuilder.toString();
                Log.i(tagName, "server res :"+resultStr);
                (Toast.makeText(this.actitivity,"Result : "+resultStr,Toast.LENGTH_SHORT)).show();
    
    
                if(dos!=null)
                {
                    try
                    {
                        dos.close();
                    }
                    catch(Exception ex)
                    {
    
                    }
                }
    
                if(dis!=null)
                {
                    try
                    {
                        dis.close();
                    }
                    catch(Exception ex){}
                }
                if(socket!=null)
                {
                    try
                    {
                        socket.close();
                    }
                    catch(Exception ex)
                    {
    
                    }
                }
    

    【讨论】:

      最近更新 更多