Chinaunix首页 | 论坛 | 博客
  • 博客访问: 524195
  • 博文数量: 151
  • 博客积分: 7010
  • 博客等级: 少将
  • 技术积分: 1405
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-22 14:32
文章分类

全部博文(151)

文章存档

2011年(1)

2010年(23)

2009年(1)

2008年(126)

我的朋友

分类: Java

2008-06-03 17:47:26

一、DatagramSocket类
   1、构造函数
     - public DatagramSocket();//如果要先发送数据可以选择这个
     - public DatagramSocket(int port);//如果要先接收数据可以选择这个
     - public DatagramSocket(int port,InetAddress laddr);//如果主机有多个IP可以选择这个
   2、close方法
      不再传输数据时,用close方法释放资源
   3、send(DatagramPacket p)方法
      发送数据包
   4、receive(DatagramPacket p)方法
      接收数据包
   5、DatagramPacket类

二、DatagramPacket类
   1、是数据的封装类,构造函数有以下两个:
      - public DatagramPacket(byte[] buf,int length);
      - public DatagramPacket(byte[] buf,int length,InetAddress address,int port);
   2、getInetAddress和getPort方法
      这两个方法分别用来从DatagramPacket对象上取得IP地址和端口号
   3、getLength和getData方法
      这两个方法分别用来从DatagramPacket对象上取得数据长度和数据内容


三、InetAddress类
   1、InetAddress是用于表示IP地址的类
   2、getByName方法(静态)
   3、getHostAddress方法


例子:创建一个简单的发送端和接收端
//==========================发送端================================
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class UdpSend
{
 public static void main(String[] args)
 {
  //创建一个DatagramSocket
  DatagramSocket ds = null;
  try
  {
   ds = new DatagramSocket();
  } catch (SocketException e)
  {
   e.printStackTrace();
  }
  String sendInfo = "hello i am coming,我来了";
  //创建DatagramPacket
  DatagramPacket dp = null;
  try
  {
   //注意下面的sendInfo.getBytes().length,因为sendInfo中包含中文,一个中文占两个字节
   //所以要先转换成byte再取长度
   dp = new DatagramPacket(sendInfo.getBytes(), sendInfo.getBytes().length,
     InetAddress.getByName("192.168.18.17"), 8888);
  } catch (UnknownHostException e1)
  {
   e1.printStackTrace();
  }
  try
  {
   ds.send(dp); //发送数据包
  } catch (IOException e)
  {
   e.printStackTrace();
  } finally
  {
   ds.close();
  }
 }
}
 
//==========================接收端================================
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UdpReceive
{
 public static void main(String[] args)
 {
  DatagramSocket ds = null;
  try
  {
   ds = new DatagramSocket(8888);
  } catch (SocketException e)
  {
   e.printStackTrace();
  }
  
  DatagramPacket  dp  =  null;
  byte[] buf = new byte[1024];
  dp = new DatagramPacket(buf,1024);
  try
  {
   ds.receive(dp);
   dp.getData();
   System.out.println(new String(buf,0,dp.getLength()));
   String IP = new String();
   IP = dp.getAddress().getHostAddress();
   System.out.println("IP="+IP);
  } catch (IOException e)
  {
   e.printStackTrace();
  }
  finally
  {
   ds.close();
  }
 }
}
阅读(707) | 评论(0) | 转发(0) |
0

上一篇:Java的网络编程类

下一篇:TCP网络程序

给主人留下些什么吧!~~