android 客户端与服务器交互 UDP方式。

客户端代码:

   

/**

* 开启UDP发送

* @author gzh

*/

public class Client implements Runnable {

@Override

public void run() {

try {


wifiGPSInfo = new WifiGPSInfo();

wifiGPSInfo.setStatusCode("32");// 签到


Intent intent = getIntent(); // 用于激活它的意图对象

String acc = intent.getStringExtra("acc");

wifiGPSInfo.setAcc(acc);


InetAddress serverAddr = InetAddress.getByName(SERVERIP);

DatagramSocket socket = new DatagramSocket();

byte[] buf;

if (!"".equals(JSON.toJSONString(wifiGPSInfo))) {

buf = (JSON.toJSONString(wifiGPSInfo)).getBytes("gbk");

} else {

buf = ("Default message").getBytes();

}

DatagramPacket packet = new DatagramPacket(buf, buf.length,

serverAddr, SERVERPORT);

socket.send(packet);

socket.close();

} catch (Exception e) {

}

}

}

/**

* 开启UDP接收

* @author gzh

*/

class ServerThread extends Thread {

public void run() {


try {

DatagramSocket socket = new DatagramSocket(4567);

byte data[] = new byte[1024];

DatagramPacket packet = new DatagramPacket(data, data.length);

socket.receive(packet);

String result = new String(packet.getData(),

packet.getOffset(), packet.getLength(), "gb2312");


try {

JSONObject jsonObject = new JSONObject(result);

String code = jsonObject.getString("code");

String msg = jsonObject.getString("msg");

// 签到状态显示

Message message = handler.obtainMessage();// 用此方法避免创建新对象,减少内存的开销

if (code != null && code.equals("1005")) {

message.what = SECUSS;

message.obj = msg;

} else if (code != null && code.equals("1006")) {

message.what = ERROR;

message.obj = msg;

}

handler.sendMessage(message);


} catch (JSONException e) {

e.printStackTrace();

}

} catch (SocketException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}


}

}

UDP方式一直存在一个问题,客户端发送请求一次之后,第二次发送请求会一直提示

java.net.BindException: Address already in use

到现在也没有解决。故暂且不使用UDP方式与服务器交互。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。