1

我正在尝试制作一个简单的聊天服务器。它在 iphone 上运行良好,但并非所有聊天都在 android 上进行。

我的想法是使用 http 协议,这样我就可以使用 iphone 和 android 上的标准 sfkd 与我的服务器通信

我在 android 上使用 URLConnection 连接类。当我在我的服务器上跟踪代码时,我注意到我正在获取标题中发送的帖子数据的长度。我没有在 URLConnection 类上设置任何长度值。我想,因为我没有在标题中设置大小,所以它不起作用。我找不到有关此的任何信息。

在我的服务器上读取 haeder 的代码

我在下面有我的服务器代码和 android 代码,

public int ReadHeader()
     {
        // read in one line
         int PageId=0;

    //   try{
            request = new StringBuffer(1000);
            System.out.println("get connection reading in header \r");
            //InputStream in = new BufferedInputStream( connection.getInputStream() );
            StopFlag=false;

            String out;
            // the first line shouls have the page
            out=ReadLine();

            int p;
            p=out.lastIndexOf("stop");
            if (p!=-1)
                PageId=1;
            p=out.lastIndexOf("enter");
            if (p!=-1)
                PageId=2;
            p=out.lastIndexOf("add");
            if (p!=-1)
                PageId=3;
            p=out.lastIndexOf("exit");
            if (p!=-1)
                PageId=4;
            p=out.lastIndexOf("update");
            if (p!=-1)
                PageId=5;

            int MessageSize=0;
            do{
                out=ReadLine();

                // check for content size
                // GET SIZR OF DATA SENT

                if (out.contains("Length"))
                {
                    System.out.println("found length \r");
                    int pes=out.indexOf(' ');
                    String Length=out.substring(pes+1);
                    System.out.println("found size");
                    System.out.println(Length); 
                    //MessageSize=(int)Length;
                    MessageSize= Integer.parseInt( Length) ;
                                      //MessageSize=36;     
                }
            } while(out!="finish header" && out!="");

            System.out.println("finsih header \r"); 
            ClientMessage=ReadSize(MessageSize); 
            /*
         } catch(IOException ec)
            {
                System.out.println(ec.getMessage());    
            }
        */
       return PageId;
     }

// CODE ON ANDROID 
           String data = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode( cGlobals.UserName, "UTF-8"); data += "&" + URLEncoder.encode("comment", "UTF-8") + "=" + URLEncoder.encode( s, "UTF-8");
                           cGlobals.Message=""; // THIS IS NOT TKING IN ANY INFO ABOUT THE LENGTH OF data                           URLConnection conn = url.openConnection();
                           // set timeouts to 5 seconds
           //              conn.setConnectTimeout(1000*5);
           //              conn.setReadTimeout(5*1000);
                           conn.setDoOutput(true);


                           OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());


                      wr.write(data);
                       wr.flush();
                       wr.close();
4

0 回答 0