DatagramSocket接收不到客户端的消息

静静的雨 2015-12-18 03:04:49
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");

DatagramPacket packet1 = new DatagramPacket(buf, buf.length);
updatetrack("Client: Receiving4\n");
socket.receive(packet1);

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();

}
}
...全文
248 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
静静的雨 2015-12-21
  • 打赏
  • 举报
回复
引用 1 楼 qq_33415017 的回复:
while (start == false) { } 一直执行空循环的吧?
用永真循环隔离,防止在调用线程更新Ui界面卡死不能操作,所以这个是空循环对于这个程序并没有什么影响
asynll 2015-12-19
  • 打赏
  • 举报
回复
while (start == false) { } 一直执行空循环的吧?

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧