qq_25006515 2015-02-05 09:03 采纳率: 57.4%
浏览 3513
已采纳

安卓和C# 用TCP通信发送数据

目前在做一个程序,安卓手机每一秒钟向PC机发送若干条数据,有可能一台机器发,也有可能若干台同时发,PC机用C#接收数据。我测试了一台安卓发数据可以正常接收,可是当若干台同时发数据的时候,就出现问题了。后来我发现不知道为什么,这些安卓设备的IP地址用DHCP自动获取IP的时候IP都是一样的,我想会不会就是因为两个相同IP的机器发送数据的时候,因为后来发后数据的机器会把原先正在发送的机器建立的TCP通信链接给关掉然后自己在发送数据,现在由于实验室路由器比较特殊,我没有权限改成静态获取,所以在此问一下是不是因为这个原因出的错,下面列出代码,麻烦大家帮忙看一看,出错的地方我用注释标记出来了
安卓端发送数据代码

 public void sendToPC(String data){
 try {
            s   =new Socket("192.168.0.104",8730);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
          DataOutputStream dout=null;   
           try 
           {
            dout =new DataOutputStream(s.getOutputStream());
           Thread.sleep(50, 0);            
            dout.writeBytes(data);
            dout.flush();
           }catch(Exception e){

           }
    }

C#段代码

     private void listenConnect()
        {
            while (true)
            {
                tcpClient = myListener.AcceptTcpClient();
                //获取网络流
                User user = new User(tcpClient);

                Thread receiveThread = new Thread(receiveData);
                receiveThread.IsBackground = true;
                receiveThread.Start(user);

            }
        }
        string receiveString = "";
        public void receiveData(object u)
        {
            User user = (User)u;
            NetworkStream netStream1 = user.client.GetStream();
            while(true){
               byte[] myReadBuffer = new Byte[1024];
               int numberOfBytesRead = 0;
               StringBuilder myCompleteMessage = new StringBuilder();
               int nodeId = 0;
               do
               {
                   numberOfBytesRead = netStream1.Read(myReadBuffer, 0, myReadBuffer.Length);//出错总是在这一句,提示错误“远程主机主动关闭现有连接”
                   myCompleteMessage.AppendFormat("{0}", Encoding.UTF8.GetString(myReadBuffer, 0, numberOfBytesRead));
               } while (netStream1.DataAvailable);
               receiveString = myCompleteMessage.ToString();
               string[] receivearr = receiveString.Split('!');
               for (int i = 0; i < receivearr.Length-1;i++ )
               {

                   string[] infoarr = receivearr[i].Split('#');
                   DoWork(infoarr[1], infoarr[0]);
               }


            }
        }
                }
  • 写回答

3条回答 默认 最新

  • diagram98 2015-02-06 14:54
    关注

    我最近也在做相关的项目,2台android手机跟PC通讯都很正 常。如果需要我可以给你个DEMO程序参照。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 github符合条件20分钟秒到账,github空投 提供github账号可兑换💰感兴趣的可以找我交流一下
  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?