udp 抛出ava.lang.IllegalArgumentException异常

jeiwt 2009-08-10 05:34:20
下面的程序是简单的UDP,Client端发送了一个Long,Server端接收并显示Long值

Client端

public class Client {

private static SocketAddress address;

private static String host = "127.0.0.1";

private static int port = 5678;

private static byte[] buf;

public Client() {
address = new InetSocketAddress(host, port);
}

public static void main(String args[]) {
Long l = 123456789L;

ByteArrayOutputStream bs = new ByteArrayOutputStream();
DataOutputStream data = new DataOutputStream(bs);
try {
data.writeLong(l);
buf = bs.toByteArray();
// address = new InetSocketAddress(host, port);
DatagramSocket ds = new DatagramSocket(6666);
DatagramPacket dp = new DatagramPacket(buf, buf.length, address);
ds.send(dp);
ds.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

当把address = new InetSocketAddress(host, port);写在构造函数中就会抛出
Exception in thread "main" java.lang.IllegalArgumentException: unsupported address type
at java.net.DatagramPacket.setSocketAddress(Unknown Source)
at java.net.DatagramPacket.<init>(Unknown Source)
at java.net.DatagramPacket.<init>(Unknown Source)
at socket.study.udp.Client.main(Client.java:27)
当把address = new InetSocketAddress(host, port);写在main中就没问题


为什么了??

下面是Server端
Server端

public class Server {

private static int port = 5678;

private static byte[] buf;

public static void main(String[] args) {

buf = new byte[1000];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
ByteArrayInputStream bs = new ByteArrayInputStream(buf);
DataInputStream data = new DataInputStream(bs);

try {
DatagramSocket ds = new DatagramSocket(port);
ds.receive(dp);
System.out.println(data.readLong());
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
...全文
178 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeiwt 2009-08-10
  • 打赏
  • 举报
回复
OK,结贴。看来自个想问题太不仔细了...
yingchunmei 2009-08-10
  • 打赏
  • 举报
回复
因为你的 private static SocketAddress address 这段代码中address 对象申明的是静态的你把它放在构造方法里面肯定不行了撒!同理main 方法是静态的所以可以

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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