qq_25006515
2015-02-05 09:03
采纳率: 57.4%
浏览 3.5k

安卓和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程序参照。

    点赞 打赏 评论
  • 埸萱 2015-02-06 05:50

    任何设备通过dhcp入网ip都不应该相同.否则ip冲突
    另外安卓与pc连接时,pc端是否用的相同端口?是的话建立一个连接后其它安卓无法再次适用这个端口建立连接的.

    点赞 打赏 评论
  • 笔落墨成 2016-08-27 00:01

    兄弟,你还有这个源码没?我卡在这里两天了。。。。有的话发份给我可否?289222346@qq.com
    谢谢了!

    点赞 打赏 评论

相关推荐 更多相似问题