黑马程序员技术交流社区
标题:
Socket同一窗口显示udp求助
[打印本页]
作者:
张承富
时间:
2013-6-17 13:38
标题:
Socket同一窗口显示udp求助
看看哪里不对,找不出来啊!
/*
编写一个聊天程序。
有收数据的部分,和发数据的部分
这两部分需要同时执行,就需要用到多线程技术
一个线程控制收 一个线程控制发
因为收和发动作是不一致的,所以要定义两个run方法
而且这两个方法要封装到不同的类中
*/
//用键盘录入
class UdpSend_Thread implements Runnable{
private DatagramSocket ds;
public UdpSend_Thread(DatagramSocket ds){
}
public void run(){
try
{
BufferedReader bufr = new BufferedReader(
new InputStreamReader(System.in));
String line = null;
while((line=bufr.readLine())!=null){
if("886".equals(line)){
break;
}
byte[] buf = line.getBytes();
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10003);
//通过socket服务,将已有的数据包发送出去,通过send方法
ds.send(dp);
}
}
catch(Exception e)
{
throw new RuntimeException("发送失败");
}
}
}
//接收键盘录入
class UdpRece_Thread implements Runnable
{
private DatagramSocket ds;
public UdpRece_Thread(DatagramSocket ds){
}
public void run(){
try
{
while(true){
//定义数据包,用于存储数据
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
//通过服务的receive方法将受到的数据存入数据包中
ds.receive(dp); //阻塞式方法,没数据就等
//通过数据包的方法获取其中的数据
String ip = dp.getAddress().getHostAddress();//获取ip
String data = new String(dp.getData(),0,dp.getLength());
int port = dp.getPort();
System.out.println(ip+data+port);
}
}
catch(Exception e)
{
throw new RuntimeException("接收失败");
}
}
}
class LiaoTian{
public static void main(String[] args) throws Exception{
DatagramSocket sendSocket = new DatagramSocket();
DatagramSocket receSocket = new DatagramSocket(10003);
new Thread(new UdpSend_Thread(sendSocket)).start();
new Thread(new UdpRece_Thread(receSocket)).start();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2