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

}
}
...全文
110 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sanxiaochengyu 2015-12-21
  • 打赏
  • 举报
回复
你客户端跟服务器端代码混在一起写?这不是乱套了 while(start==false){//这段代码感觉好像没有什么用,是吗? } 这句一直在死循环,后面的没有执行 看看别人写的 http://blog.chinaunix.net/uid-20384806-id-1954268.html
静静的雨 2015-12-21
  • 打赏
  • 举报
回复
引用 1 楼 a87b01c14 的回复:
你服务器怎么写的?
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, 1024); updatetrack("Server: Receiving2\n"); socket1.receive(packet1); //每次运行的这个地方,就不能在继续运行,一直不明白原因 updatetrack("Server: Succeed0!\n"); updatetrack("Server: Message received: ‘" + new String(packet1.getData()) + "’\n"); socket1.close(); } catch (Exception e) { updatetrack("Server: Error!\n"); } } } 这个就是我的服务器代码,帮忙看看吧,对于代码中一些不懂的地方,我添加了注释,希望可以帮忙一起解答,谢谢
静静的雨 2015-12-21
  • 打赏
  • 举报
回复
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"); } } } 这个就是我的服务器代码,帮忙看看吧,谢谢
sanxiaochengyu 2015-12-18
  • 打赏
  • 举报
回复
你服务器怎么写的?

80,351

社区成员

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

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