站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题关于UDP传输的问题

关于UDP传输的问题

摘要: 关于UDP传输的问题


我最近用JAVA编写了一个类似于QQ的JAVA程序.当关闭客户端主界面时,对每位好友发出一个DATAGRAM,
但是好友收到信息后的处理方式却存在问题.不知道是什么原因


如果只是在收到消息后处理出现问题,就不是UDP传输的问题。自己多check你的代码吧。


up mark


本人是在本机上测试,代码大致说一下
datagramsocket ds=new datagramsocket(qQ端口号);
byte[] buffer=new byte[256];
datagrampacket dp=new datagrampacket();
while(true){
dp=ds.accept();
string data=new String(dp.getData());
if(data.subtring(0,6).equals(-#34;online-#34;){
Online(data);
}else{
if(data.substring(0,7).equals(-#34;offline-#34;){
Offline(data);
}
}
}
.....
//关闭主窗口时
{
datagramsocket ds=new datagramsocket();
datagrampacket dp=new datagrampacket();
for(int i=0;i-#60;朋友数;i++){
byte[] buffer=new byte[256];
buffer=-#34;offline-#34;+本人ICQ号;
dp=new datagrampacket(buffer,buffer.length,IP,朋友端口号);
ds.send(dp);
}
system.out.println(buffer);
}
问题就在这,它输出的结果却不同
比如:
offline1000
offline100
offline1(不确定)
....
这是什么原因?哪位高手知道


消息处理方式也存在问题,我将offline改为ofline;输出结果就一致了,都是ofline1000,但是同样收到这个消息,有的好友是做了ofline处理,但是有的却做了talk处理(聊天处理);
我想这会不会是多线程的理解不对?
class Main extends JFrame implements Runnable{
public Main(){
init();//初始化界面
Thread thr=new Thread(this);
thr.start();
}
public void run(){
datagramsocket ds=new datagramsocket(qQ端口号);
byte[] buffer=new byte[256];
datagrampacket dp=new datagrampacket();
while(true){
dp=ds.accept();
string data=new String(dp.getData());
if(data.subtring(0,6).equals(-#34;online-#34;){
Online(data);
}else{
if(data.substring(0,6).equals(-#34;ofline-#34;){
Offline(data);
}
else(data.substring(0,6).equals(-#34;talkto-#34;){
Talk(data,icqno);
}
}
}
//关闭窗口处理(省略);
}


有的好友执行的是Offline(),而有的却是执行Talk(),怪事!


建议啊,用线程的方式处理这种问题


我想应该是线程的问题吧,可能有些方法没有加锁


datagramsocket ds=new datagramsocket(qQ端口号);...... dp=ds.accept();
楼主,这句话是有问题的吧?这可不是UDP的方式啊,是TCP啊,改成dp=ds.receive();



我知道问题所在了,是没有synchronized造成莫名其妙的错误,不过还是得谢大家


↑返回目录
前一篇: 怎么使static变量还原到刚刚装载class时的状态
后一篇: 关于多态的问题 ,帮我解决拉,,谢谢拉