关于UDP传输的问题 我最近用JAVA编写了一个类似于QQ的JAVA程序.当关闭客户端主界面时,对每位好友发出一个DATAGRAM,但是好友收到信息后的处理方式却存在问题.不知道是什么原因 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果只是在收到消息后处理出现问题,就不是UDP传输的问题。自己多check你的代码吧。 本人是在本机上测试,代码大致说一下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("online"){ Online(data); }else{ if(data.substring(0,7).equals("offline"){ Offline(data); } }}.....//关闭主窗口时{ datagramsocket ds=new datagramsocket(); datagrampacket dp=new datagrampacket(); for(int i=0;i<朋友数;i++){ byte[] buffer=new byte[256]; buffer="offline"+本人ICQ号; dp=new datagrampacket(buffer,buffer.length,IP,朋友端口号); ds.send(dp); } system.out.println(buffer);}问题就在这,它输出的结果却不同比如:offline1000offline100offline1(不确定)....这是什么原因?哪位高手知道 消息处理方式也存在问题,我将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("online"){ Online(data); }else{ if(data.substring(0,6).equals("ofline"){ Offline(data); } else(data.substring(0,6).equals("talkto"){ Talk(data,icqno); } } } //关闭窗口处理(省略);} 有的好友执行的是Offline(),而有的却是执行Talk(),怪事! datagramsocket ds=new datagramsocket(qQ端口号);...... dp=ds.accept();楼主,这句话是有问题的吧?这可不是UDP的方式啊,是TCP啊,改成dp=ds.receive(); 我知道问题所在了,是没有synchronized造成莫名其妙的错误,不过还是得谢大家 关于编译软件 【请教】不点logout,关闭网页,怎么清空session? 论坛中如何显示回复帖子数 加载类,如何带入参数? 请教:如何算周末日期 ResultSet is closed Exception 一个字符串"abc中国",如果我要读出4个字符,"abc和半个“中"字,这个怎么实现? 送分!大家好!小弟初来此处,还望大家多多关照 谁/那里有SCJP/SCJD的试题可供下载? 关于HttpURLConnection抓取数据502异常问题 推送技术 drawImage()的问题
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("online"){
Online(data);
}else{
if(data.substring(0,7).equals("offline"){
Offline(data);
}
}
}
.....
//关闭主窗口时
{
datagramsocket ds=new datagramsocket();
datagrampacket dp=new datagrampacket();
for(int i=0;i<朋友数;i++){
byte[] buffer=new byte[256];
buffer="offline"+本人ICQ号;
dp=new datagrampacket(buffer,buffer.length,IP,朋友端口号);
ds.send(dp);
}
system.out.println(buffer);
}
问题就在这,它输出的结果却不同
比如:
offline1000
offline100
offline1(不确定)
....
这是什么原因?哪位高手知道
我想这会不会是多线程的理解不对?
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("online"){
Online(data);
}else{
if(data.substring(0,6).equals("ofline"){
Offline(data);
}
else(data.substring(0,6).equals("talkto"){
Talk(data,icqno);
}
}
}
//关闭窗口处理(省略);
}
楼主,这句话是有问题的吧?这可不是UDP的方式啊,是TCP啊,改成dp=ds.receive();