目前在做一个程序,安卓手机每一秒钟向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]);
}
}
}
}