android平台通过socket向C++服务器端发送数据和接收数据的相关问题

来源:互联网 发布:法尔廷斯什么级别 知乎 编辑:程序博客网 时间:2024/05/17 06:12

解决了安卓客户端和服务器端交互的较常见问题

原文地址:http://doublekj.blog.163.com/blog/static/146818474201171832955120/

以下是代码:

     String s="***********\0";              

     //这里的\0是因为服务器端指定发送的消息必须跟着结束符。而直接用println(s)传送时出现错误,因为string  类是没有'0'结束符的。

    char[] msg_01=new char[s.length()];      

    msg_01 = s.toCharArray(); //这里将字符串转换为一个字符数组,而char是有结束符的。服务器能接收到正确的消息并给予回应。

   //byte[] msg_03=new byte[100];         

   //msg_03=s.getBytes();

   //将字符串转为字节数组,在本机上观察到的msg_03数据是正确的,但是服务器端接收的数据并不准确。个人认为可能在数据流传输时出现错误,之前看到的demo只有字符串和字符数组的传送,不知道字节数组可不可以。

   // 创建socket对象,指定服务器端地址和端口号
   //ClientSocket = new Socket(Address, Port); 
   ClientSocket=new Socket();
   ClientSocket.connect(new InetSocketAddress(Address, Port), SOCKET_TIMEOUT);  
   Isconnect=ClientSocket.isConnected();


   //之前不确定通道是否连通,自己加的测试。
   if(Isconnect){
    mTextView_03.setText("连接成功!");
   }
   else{ mTextView_03.setText("连接失败!");}
   
   // 获取 Client 端的输出流
   PrintWriter out = new PrintWriter(new BufferedWriter(
     new OutputStreamWriter(ClientSocket.getOutputStream())), true);
   // 填充信息
   out.println(msg_01);
   System.out.println("msg=" + s);
  
    // 接受信息 
   BufferedReader br = new BufferedReader(
   new InputStreamReader(ClientSocket.getInputStream())); 
   String msg_02 = br.readLine();    

  //如果服务器端发送的数据有加换行符\n,是可以正常接收的。但是服务器设置发送的是没有换行符的,所以接收数据会出现错误,我需要改为一个字符一个字符的接收,没那么方便,悲剧~~

   嗯,后来用的是这样的方法:

   //char[] m=new char[100];
  // br.read(m);
  // String   msg_02=new String(m);


   if (msg_02 != null) {
          mTextView_04.setText(msg_02);
   } else {
    mTextView_04.setText("数据错误!");
   }
   // 关闭流 和socket
   out.close();
   br.close();

   ClientSocket.close();

0 0