通过套接字连接进行通信:

时间:2011-04-16 17:17:00

标签: java android sockets

已完成的步骤:

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

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

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

我让服务器摘要两个独立的参数并相应地处理它们。

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

请大家帮我一个客户端类和服务器类的示例,使用BufferedReaderPrintWriter将数据从客户端发送到服务器,接受服务器端的数据和返回客户端要接收的数据?

谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

从套接字输出流

创建一个新的PrintWriter
 PrintWriter writer = new PrintWriter(new BufferedOutputStream(socket.getOutputStream()));
 writer.write("blather");
 writer.flush();

答案 1 :(得分:0)


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

                     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)
                {

                }
            }