黑马程序员技术交流社区
标题:
网络编程: 无法接收数据
[打印本页]
作者:
黑马李刚
时间:
2011-9-11 20:31
标题:
网络编程: 无法接收数据
编译运行未报错啊,就是无法接收数据[code=java]import java.net.*;
import java.io.*;
//发送端
class L
{
public static void main(String args[]) throws Exception
{
DatagramSocket ds=new DatagramSocket();
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String line=null;
while((line=br.readLine())!=null)
{
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.0.101"),20006);
ds.send(dp);
}
ds.close();
}
}
//接收端
class L1
{
public static void main(String args[]) throws Exception
{
DatagramSocket ds=new DatagramSocket(20006);
while(true)
{
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
ds.receive(dp);
String text=new String(dp.getData(),0,dp.getLength());
System.out.println(text);
ds.close();
}
}
}[/code]
[
本帖最后由 黑马李刚 于 2011-09-11 20:32 编辑
]
作者:
杨相国
时间:
2011-9-11 21:11
我运行了一下你的程序
问题一:编译是没问题 但是运行时出现异常了 java.net.SocketException: Socket closed
因为你的接收端用的是while(true),虽然没错,但是你把ds.close(); 写进去了,当你先运行接收端的时候 Socket 已经关闭了,你可以写个Thread来控制下。。
另外最重要的问题就是:
你应该吧这句话 byte[] buf=new byte[1024];改成buf = line.getBytes(),否则你这句话while((line=br.readLine())!=null)读出来的line是没用的,然后你发过去的也是空的。最简单的修改,代码如下:[code=java]//接收端
class L1 {
public static void main(String args[]) throws Exception {
while (true) {
DatagramSocket ds = new DatagramSocket(20006);
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
ds.receive(dp);
String text = new String(dp.getData(), 0, dp.getLength());
System.out.println(text);
ds.close();
}
}
}[/code][code=java]//发送端
class L {
public static void main(String args[]) throws Exception {
DatagramSocket ds = new DatagramSocket();
System.out.println("输入: ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while ((line = br.readLine()) != null) {
byte[] buf = line.getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length,
InetAddress.getLocalHost(), 20006);
System.out.println(new String(dp.getData(), 0, dp.getLength()));
ds.send(dp);
}
ds.close();
}
}[/code]
[
本帖最后由 杨相国 于 2011-09-11 21:26 编辑
]
作者:
匿名
时间:
2011-9-11 21:40
发送端的 line
while((line=br.readLine())!=null)
跟本没用到
作者:
程钧杰
时间:
2011-9-12 23:55
//一行行的读下去
while((line=br.readLine())!=null)
12.
{
13.
//错在这里,建立缓冲区把上面得到每一行的数据放入缓冲区内byte[] buf = line.getBytes()
byte[] buf=new byte[1024];
14.
//把得到的数据打包成对象
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.0.101"),20006);
15.
ds.send(dp);
16.
}
复制代码
[
本帖最后由 chengjj520 于 2011-09-12 23:56 编辑
]
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2