我有一個處理接收和發送UDP數據包的線程,這工作正常,直到X數據包已收到,然後客戶端只是停止嘗試接收數據包,並停止發送它們,所有的catch函數都不顯示任何內容,客戶端只是停止詢問數據包。 這裏是我的客戶端運行代碼Android線程剛剛停止
public void run()
{
if(host == true) { setUpClient(); server.start(); }
rdyForPlay = true;
boolean run = true;
boolean setupPlayer = false;
while(run)
{
//Tell the server to give position of players
//if(setupPlayer == true)
//{
// setUpClient();
// setupPlayer = false;
//}
if(host == false)
{
try {
if(socket == null)
{
socket = new DatagramSocket(port);
}
byte[] bufer = new byte[256];
//String msg = "position";
String msg = ID +":"+ assets[ID].returnPosX() +":"+ assets[ID].returnPosY();
int msgLength = msg.length();
bufer = msg.getBytes();
InetAddress address;
address = InetAddress.getByName("192.168.1.59");
DatagramPacket p = new DatagramPacket(bufer, bufer.length , address, port);
socket.send(p);
} catch (UnknownHostException e2) {
// TODO Auto-generated catch block
Log.d(TAG, "Error with unknown host");
e2.printStackTrace();
} catch (SocketException e) {
// TODO Auto-generated catch block
Log.d(TAG, "Error with socket");
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
Log.d(TAG, "Error with sending/receiving data");
e.printStackTrace();
}
byte[] buf = new byte[256];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
try
{
socket.receive(packet);
}
catch (IOException e)
{
Log.d(TAG, "Error with receiving data");
e.printStackTrace();
}
String data = new String(buf, 0, packet.getLength());
//Split the string up
String[] dataArray = data.split("#");
int newTotalPlayers = Integer.parseInt(dataArray[0]);
if(newTotalPlayers != totalPlayers)
{
Log.d(TAG," what is total amount of players:" + newTotalPlayers);
if(newTotalPlayers == 1)
{
newPlayer(0);
totalPlayers = newTotalPlayers;
}
else
{
newPlayer(newTotalPlayers);
totalPlayers = newTotalPlayers;
}
//if(ID == 0 && host == false)
//{
// ID = newTotalPlayers;
// setupPlayer = true;
//}
}
//Do a for loop to go through dataArray
for(int i = 0; i < totalPlayers; i++)
{
String[] pos = dataArray[(i + 1)].split(":");
if(Integer.parseInt(pos[(i*3)]) == ID)
{
Log.d(TAG, "Do nothing please");
}
else
{
assets[i].setPosition(Integer.parseInt(pos[(i*3) + 1]), Integer.parseInt(pos[(i*3) + 2]));
}
}
}
}
Log.d(TAG, "Error with run value");
}
這工作得很好,它只是真讓我心煩的是,連接後,只要下降一些奇怪的原因,我無法找到如無印在所有的logcat
帆布
PS如果需要,可以
這裏被賦予更多的代碼是我的服務器運行的方法
public void run() {
InetAddress client = null;
boolean run = true;
String data = "";
DatagramPacket packet = null;
while(run)
{
if(data.equalsIgnoreCase(""))
{
/*Log.d(TAG, "waiting for clients");
String msg = "waiting";
int msgLength = msg.length();
byte[] message = msg.getBytes();
DatagramPacket p = new DatagramPacket(message, msgLength, client, port);
try
{
socket.send(p);
}
catch (IOException e2)
{
Log.d(TAG, "Error with sending");
e2.printStackTrace();
}*/
}
//Send some data
if(data.equalsIgnoreCase("connect"))
{
Log.d(TAG, "ID send :" + packet.getAddress());
address.add(packet.getAddress());
players += 1;
String msg = String.valueOf(players);
int msgLength = msg.length();
byte[] message = msg.getBytes();
DatagramPacket p = new DatagramPacket(message, msgLength, packet.getAddress(), port);
try
{
socket.send(p);
}
catch (IOException e2)
{
Log.d(TAG, "Error with sending");
e2.printStackTrace();
data = "";
}
}
//if(/*data.equalsIgnoreCase("position")*/ address.size() > 0)
//{
//Create for loop to create the string
String msg = "";
msg = players + "#";
for(int i = 0; i < players; i++)
{
msg += + i + ":" + assets.get(i).returnPosX() + ":" + assets.get(i).returnPosY() + ":";
}
//msg = String.valueOf(
// players + ":" +
// "1:" + assets.get(0).returnPosX() + ":" + assets.get(0).returnPosY());
int msgLength = msg.length();
byte[] message = msg.getBytes();
for(int i = 0; i < address.size() ; i++)
{
DatagramPacket p = new DatagramPacket(message, msgLength, address.get(i), port);
try
{
socket.send(p);
}
catch (IOException e2)
{
Log.d(TAG, "Error with sending");
e2.printStackTrace();
}
}
//Log.d(TAG, "Data sent is:" + msg);
//}
data = " ";
//Receive some data
byte[] buf = new byte[256];
packet = new DatagramPacket(buf, buf.length);
try
{
socket.receive(packet);
}
catch (IOException e)
{
Log.d(TAG, "Error with receiving data");
e.printStackTrace();
}
data = new String(buf, 0, packet.getLength());
//Log.d(TAG, "Data received was :" + data);
try
{
this.sleep(25);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
Log.d(TAG, "Error with trying to sleep");
e.printStackTrace();
}
}
Log.d(TAG, "Error with while run value");
}
很抱歉的評論
有趣,可能是連接自動停止了嗎? – Eugene 2013-03-28 09:42:15
我會發布我的服務器運行方法 – Canvas 2013-03-28 09:43:46
我會添加日誌顯示客戶端1)何時會收到一個數據包(包括接收數據包的數量); 2)已經收到一個數據包(包括收到的數據包的數量); 3)終止。一般來說,我已經看到無線網絡斷開和重新連接,沒有明顯的原因;如果是這種情況,你可能需要重新連接。 – 18446744073709551615 2013-03-28 09:54:03