A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张超超 黑马帝   /  2012-4-17 09:57  /  1605 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//服务器
package class3.apr10.danjiaxin;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

/**
* @author danjiaxin
*
*/
public class UDPA {
        public static void main(String[] args) throws Exception {
                Scanner input = new Scanner(System.in);
                System.out.println("服务器启动");
                DatagramSocket ds = new DatagramSocket(1234);
                byte[] by = new byte[1024];
                DatagramPacket dp = new DatagramPacket(by, by.length, InetAddress.getLocalHost(), 1234);
                ds.receive(dp);
                by = dp.getData();
                String str = new String(by).trim();
                System.out.println("服务器接受信息是:"+str);
               
        }
}
/客户端
package class3.apr10.danjiaxin;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

/**
* @author danjiaxin
*
*/
public class UDPB {
        public static void main(String[] args) throws Exception {
                System.out.println("客户端启动");
                DatagramSocket ds = new DatagramSocket();
                Scanner input = new Scanner(System.in);
                System.out.println("请输入客户信息");
                String str = input.nextLine();
                DatagramPacket dp = new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getLocalHost(), 1234);
                ds.send(dp);
        }
}

报错:Exception in thread "main" java.net.SocketException: Socket closed
        at java.net.PlainDatagramSocketImpl.receive0(Native Method)
        at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:136)
        at java.net.DatagramSocket.receive(DatagramSocket.java:712)
        at class3.apr10.danjiaxin.UDPA.main(UDPA.java:25)

3 个回复

倒序浏览
代码是没有问题的,你应该先启动服务器端,在启动客户端
回复 使用道具 举报
本帖最后由 周四川 于 2012-4-17 14:05 编辑

看了下代码,你的发送端和接收端(UDP貌似没有客户端和服务器之说)在实例化DatagramPacket对象时,都是用的
DatagramPacket dp = new DatagramPacket(by, by.length, InetAddress.getLocalHost(), 1234);
在接收端实例化DatagramPacket时,不需要指定ip地址和端口号,
DatagramPacket dp = new DatagramPacket(by, by.length);
即可。
回复 使用道具 举报
DatagramPacket dp = new DatagramPacket(by, by.length, InetAddress.getLocalHost(), 1234)和DatagramPacket dp = new DatagramPacket(by, by.length)
都行,代码没问题:如果你用的是eclipse的话就在同一个包里建两个java文件,一个是客户端,一个服务端,即可;如果你用的是editplus则分别运行。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马