黑马程序员技术交流社区
标题:
关于网络编程的问题
[打印本页]
作者:
ぺsimon☆
时间:
2013-5-6 16:36
标题:
关于网络编程的问题
/*
这是一个聊天程序
*/
import java.io.*;
import java.net.*;
class UdpSend2 implements Runnable
{
private DatagramSocket dgs;
UdpSend2(DatagramSocket dgs)
{
this.dgs=dgs;
}
public void run()
{
try
{
//键盘录入
BufferedReader bur=new BufferedReader(new InputStreamReader
(System.in));
String line=null;
//读取键盘的数据
while((line=bur.readLine())!=null)
{
if("886".equals(line)) //判断结束标记
break;
byte[] buf=line.getBytes();//把字符串转为字节数组
//定义一个数据包,并把数据存储在包中
DatagramPacket dgp=new DatagramPacket
(buf,buf.length,InetAddress.getByName("169.254.0.254"),1003);
dgs.send(dgp);//把数据包发送到指定的端口
}
dgs.close();//关闭资源
}
catch(Exception e)
{
throw new RuntimeException("发送失败");
}
}
}
class UdpRece2 implements Runnable
{
private DatagramSocket dgs;
UdpRece2(DatagramSocket dgs)
{
this.dgs=dgs;
}
public void run()
{
while(true)
{
try
{
byte[] buf=new byte[1024];//定义数组
//定义一个数据包
DatagramPacket dgp=new DatagramPacket(buf,buf.length);
dgs.receive(dgp);//接受端口发来的数据,存储在dgp包中,阻塞式语句
String ip=dgp.getAddress().getHostAddress();//得到数据的ip地址
//得到数据包中的内容
String data=new String(dgp.getData(),dgp.getLength());
//得到数据包的端口
int port=dgp.getPort();
System.out.println("ip:"+ip+"..."+"data:"+data+"port:"+port);
}
catch(Exception e)
{
throw new RuntimeException("接受信息失败");
}
}
}
}
class UdpDemo
{
public static void main(String[] args)throws Exception
{
DatagramSocket send=new DatagramSocket();
DatagramSocket rece=new DatagramSocket(1003);//指定端口
UdpSend2 usend=new UdpSend2(send);
UdpRece2 urece=new UdpRece2(rece);
//开启线程
new Thread(usend).start();
new Thread(urece).start();
}
}
/*
谢谢各位兄弟
错误提示:
E:\Java\jdk1.6.0_23\experience_heima\23>javac UdpDemo.java
注意:UdpDemo.java 使用或覆盖了已过时的 API。
注意:要了解详细信息,请使用 -Xlint:deprecation 重新编译。
*/
复制代码
作者:
HM朱蛟
时间:
2013-5-7 00:17
本帖最后由 HM朱蛟 于 2013-5-7 00:25 编辑
2个问题
1:
72行 改成 String data=new String(dgp.getData(),dgp.
0
,getLength());
2:
try 的作用域应该涵盖while语句
作者:
孙金鑫
时间:
2013-5-7 00:41
本帖最后由 孙金鑫 于 2013-5-7 00:43 编辑
<DIV class=blockcode>
<BLOCKQUOTE>/*
这是一个聊天程序
*/
import java.io.*;
import java.net.*;
class UdpSend2 implements Runnable
{
private DatagramSocket dgs;
UdpSend2(DatagramSocket dgs)
{
this.dgs=dgs;
}
public void run()
{
try
{
//键盘录入
BufferedReader bur=new BufferedReader(new InputStreamReader(System.in));
String line=null;
//读取键盘的数据
while((line=bur.readLine())!=null)
{
if("886".equals(line)) //判断结束标记
break;
byte[] buf=line.getBytes();//把字符串转为字节数组
//定义一个数据包,并把数据存储在包中
DatagramPacket dgp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.0.102"),10003);
dgs.send(dgp);//把数据包发送到指定的端口
}
// dgs.close();//关闭资源
}
catch(Exception e)
{
throw new RuntimeException("发送失败");
}
}
}
class UdpRece2 implements Runnable
{
private DatagramSocket dgs;
UdpRece2(DatagramSocket dgs)
{
this.dgs=dgs;
}
public void run()
{
while(true)
{
try
{
byte[] buf=new byte[1024];//定义数组
//定义一个数据包
DatagramPacket dgp=new DatagramPacket(buf,buf.length);
dgs.receive(dgp);//接受端口发来的数据,存储在dgp包中,阻塞式语句
String ip=dgp.getAddress().getHostAddress();//得到数据的ip地址
//得到数据包中的内容
String data=new String(dgp.getData(),0,dgp.getLength()); //注意这里!!!!!!!你少了一个0……
//得到数据包的端口
int port=dgp.getPort();
System.out.println("ip:"+ip+"..."+"data:"+data+"port:"+port);
}
catch(Exception e)
{
throw new RuntimeException("接受信息失败");
}
}
}
}
class UdpDemo
{
public static void main(String[] args)throws Exception
{
DatagramSocket send=new DatagramSocket();
DatagramSocket rece=new DatagramSocket(10003);//指定端口
UdpSend2 usend=new UdpSend2(send);
UdpRece2 urece=new UdpRece2(rece);
//开启线程
new Thread(usend).start();
new Thread(urece).start();
}
}
/*
换了下IP地址,自己改回来,注意下70行
*/
复制代码
作者:
黄玉昆
时间:
2013-5-8 21:10
如果问题未解决,请继续追问,如果问题解决了,请将分类改为“已解决”,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2