java程序怎么实现UDP多线程通信 用split方法分不开两段啊 以下程序有错的地方希望纠错 谢谢!! 50

UDPServer//服务端代码packagecom.udp;importjava.net.*;importjava.util.*;importjava.io.*;pub... UDPServer//服务端代码
package com.udp;
import java.net.*;
import java.util.*;
import java.io.*;

public class Server {

/**
* @param args
*/

public static Map<String,DatagramSocket> list=new HashMap<String, DatagramSocket>();
public static void main(String[] args) {

try {
DatagramSocket Servers=new DatagramSocket(15600);//Server端口
new sfz(Servers).start();//线程
} catch (SocketException e) {
System.out.println("服务器启动失败!");
}

}

}

class sfz extends Thread{
static DatagramSocket ds;
static DatagramPacket dp;
static byte[] a;
static InetAddress dz;
static int port;
public sfz(DatagramSocket ds){
this.ds=ds;
}
public void run(){

while(true){

try {
a=new byte[8192];
dp=new DatagramPacket(a,a.length);
ds.receive(dp);
a=dp.getData();
dz=dp.getAddress();//获取用户地址
port=dp.getPort();//获取用户端口
} catch (IOException e1) {
System.out.println("接收客户信息失败!");
}
try{

String nr=new String(a,0,a.length).trim();

if(nr.startsWith("ZC:")){

System.out.println("登录名:"+ nr);
String name =nr.substring(3);
if(Server.list.containsKey(name)){
DatagramSocket ds2=Server.list.get(name);
if(ds2!=null){
a=new byte[8192];
a="该用户已在线!".getBytes();
dp=new DatagramPacket(a,a.length,ds2.getLocalAddress(),ds2.getLocalPort());//不知如何有没有错。
ds.send(dp);
ds.close();
}
}

Server.list.put(name, ds);
a=new byte[8192];
a="OK".getBytes();
dp=new DatagramPacket(a,a.length,dz,port);
ds.send(dp);
}else{
System.out.println(nr);
String[] zf=nr.split("_");
System.out.println("内容:"+zf[0]);
System.out.println("转发给:"+zf[1]);

if(zf[1].equals("0")){
Set<String> set=Server.list.keySet();
for(String s:set){

DatagramSocket ds3=Server.list.get(s);
if(ds3.equals(this.ds)){
continue;
}else{
a=new byte[8192];
a=zf[0].getBytes();
dp=new DatagramPacket(a,a.length,ds3.getLocalAddress(),ds3.getLocalPort());
ds.send(dp);
}
}
}else{
DatagramSocket ds4=Server.list.get(zf[1]);
System.out.println(ds4);

if(ds4==null){
a=new byte[8192];
a="没有该用户".getBytes();
dp=new DatagramPacket(a,a.length,dz,port);
ds.send(dp);
}else{

a=new byte[8192];

a=zf[0].getBytes();
dp=new DatagramPacket(a,a.length,ds4.getLocalAddress(),ds4.getLocalPort());

ds.send(dp);

}

}

}

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

}
展开
 我来答
xuexiao45
2011-12-10 · TA获得超过2343个赞
知道小有建树答主
回答量:794
采纳率:0%
帮助的人:163万
展开全部
a=new byte[8192];
a="没有该用户".getBytes();
首先这句的写法就有大问题了……
你把a先指向了一个8192长度的byte数组 然后马上又把a指向xxxx.getBytes(),也就是说第一句没有任何用处

然后你具体的代码 我已经不知道你想做什么了~~~如果你只是想用DatagrameSocket来实现数据传输其实很简单的……可以参见orelly的《java网络编程》里面的例子 我就不贴了
然后把例子改成多线程的就行了……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式