DatagramSocket接受不到客户端发送的消息
静静的雨 2015-12-18 03:15:28 ANDROID菜鸟一名,老板要求用UDP通信,根据相关教程写的下面代码,能够发送消息到服务器,但服务器不能接受消息。求大神帮忙看看
public class MainActivity extends Activity implements
android.view.View.OnClickListener {
public static final String SERVERIP = "192.168.1.100"; //这是服务器端的ip
public static final int SERVERPORT = 6000;
public TextView text1;
public EditText input;
public Button btn;
public boolean start;
public Handler Handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text1 = (TextView) findViewById(R.id.textView1);
input = (EditText) findViewById(R.id.editText1);
btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(this);
start = false;
Handler = new Handler() {
@Override
public void handleMessage(Message msg) {
String text = (String) msg.obj;
text1.append(text);
}
};
}
public class Client implements Runnable {
@Override
public void run() {
while (start == false) {
}
try {
Thread.sleep(500);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
InetAddress serverAddr = InetAddress.getByName(SERVERIP);
updatetrack("Client: Start connecting\n");
DatagramSocket socket = new DatagramSocket();
byte[] buf;
if (!input.getText().toString().isEmpty()) {
buf = input.getText().toString().getBytes();
} else {
buf = ("Default message").getBytes();
}
DatagramPacket packet = new DatagramPacket(buf, buf.length,
serverAddr, SERVERPORT);
updatetrack("Client: Sending ‘" + new String(buf) + "’\n");
socket.send(packet);
updatetrack("Client: Message sent\n");
updatetrack("Client: Succeed!\n");
} catch (Exception e) {
updatetrack("Client: Error!\n");
}
}
}
public class Server implements Runnable {
@Override
public void run() {
while (start == false) {
}
try {
byte[] buf = new byte[1024];
DatagramSocket socket1 = new DatagramSocket(SERVERPORT);
updatetrack("\nServer: Receiving1\n");
//相当于空的接受包,对象的作用是接收DatagramSocket中的数据
DatagramPacket packet1 = new DatagramPacket(buf, buf.length);
updatetrack("Server: Receiving2\n");
socket1.receive(packet1);
updatetrack("Server: Succeed0!\n");
updatetrack("Server: Message received: ‘"
+ new String(packet1.getData()) + "’\n");
updatetrack("Server: Succeed!\n");
socket1.close();
} catch (Exception e) {
updatetrack("Server: Error!\n");
}
}
}
public void updatetrack(String s) {
Message msg = new Message();
String textTochange = s;
msg.obj = textTochange;
Handler.sendMessage(msg);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.getId()==R.id.button1) //按键事件响应,如果是则将启动一个新线程
start = true;
new Thread(new Server()).start();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
new Thread(new Client()).start();
}
}