[转贴]马士兵Java学习笔记

上一篇 / 下一篇  2011-05-08 17:27:41 / 个人分类:JAVA

1006

 

利用UDP传送一个long类型的数,服务器端收到后再次将其转换为long类型

例子:

import java.net.*;

import java.io.*;

public class TestUDPClient{

      public static void main(String args[]) throws Exception

      {

             long n = 10000L;

             ByteArrayOutputStream baos = new ByteArrayOutputStream();

             DataOutputStream dos = new DataOutputStream(baos);//只有DataOutputStream才可以直接往外写一个long类型的数

             dos.writeLong(n);//把写到字节数组。

             byte[] buf = baos.toByteArray();//baos里的东西转换为字节数组,即拿到字节数组

             DatagramPacket dp=new DatagramPacket(buf,buf.length,new InetSocketAddress("127.0.0.1", 5678));//因为UDP本身没有连接,所以需要在包裹上写目的地址,端口

             DatagramSocket ds = new DatagramSocket(9999);//自己用的是9999端口,向对方127.0.0.15678发数据

             ds.send(dp);//发送数据

             ds.close();

             

      }

}

 

 

import java.net.*;

import java.io.*;

public class TestUDPServer{

      public static void main(String args[]) throws Exception{

            byte buf[] = new byte[1024];//实际存数据的地方是此数组

             DatagramPacket dp = new DatagramPacket(buf, buf.length);//数组外套了一个包裹

             DatagramSocket ds = new DatagramSocket(5678);//指定了监听端口

             while(true)

             {

                    ds.receive(dp);//只要ds收到数据就扔到dp里面

                    ByteArrayInputStream bais = new ByteArrayInputStream(buf);//将字节数组里的东西输入程序

                    DataInputStream dis = new DataInputStream(bais);// DataInputStream可以把字节转换为long类型

                    System.out.println(dis.readLong());//包裹里所存数据的长度

             }

      }

}

ByteArrayOutputStream类:实现了一个输出流,其中的数据被写入一个byte数组。
ByteArrayOutputStream类方法public byte[] toByteArray()创建一个新分配的byte数组。其大小是此输出流的当前大小,并且缓冲区的有效内容已复制到该数组中。返回:以byte数组的形式返回此输出流的当前内容。即拿到字节数组
 
DataOutputStream类:数据输出流允许应用程序以适当方式将基本Java数据类型写入输出流中。
DataOutputStream类方法public final void writeLong(long v)throwsIOException将一个long值以8-byte值形式写入基础输出流中,先写入高字节。
 
DataInputStream类:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本Java数据类型

DataInputStream类方法public final long readLong()throwsIOException从包含的输入流中读取此操作需要的字节。返回:此输入流的下八个字节,将它们解释为一个long

 

 

DatagramSocket类构造方法public DatagramSocket(int port)throwsSocketException创建数据报套接字并将其绑定到本地主机上的指定端口。
DatagramSocket类方法public void receive(DatagramPacket p)throwsIOException从此套接字接收数据报包。当此方法返回时,DatagramPacket的缓冲区填充了接收的数据。数据报包也包含发送方的IP地址和发送方机器上的端口号。此方法在接收到数据报前一直阻塞

DatagramSocket类方法public void send(DatagramPacket p)throwsIOException从此套接字发送数据报包。DatagramPacket包含的信息指示:将要发送的数据、其长度、远程主机的IP地址和远程主机的端口号。

 
DatagramPacket类构造方法public DatagramPacket(byte[] buf,int length)构造DatagramPacket,用来接收长度为length的数据包。length参数必须小于等于buf.length。参数:buf -保存传入数据报的缓冲区。len -要读取的字节数。

DatagramPacket类构造方法public DatagramPacket(byte[] buf,int length,SocketAddress address)

throwsSocketException构造数据报包,用来将长度为length的包发送到指定主机上的指定端口号。length参数必须小于等于buf.length

DatagramPacket类方法public int getLength()返回将要发送或接收到的数据的长度
 
String类构造方法public String(byte[] bytes,int offset,int length)通过使用平台的默认字符集解码指定的byte子数组,构造一个新的String。新String的长度是字符集的函数,因此可能不等于该子数组的长度。

TAG:

 

评分:0

我来说两句

Open Toolbar