您的位置:首页 > 编程语言

UDP编程开端(发送double类型)

2016-08-17 20:38 295 查看
有两点值得注意:

1。UDP编程的基本框架

服务器端:

DatagramSocket ds=new DatagramSocket(服务器的端口);

byte[]b=new byte[1024];

DatagramPacket dp=new DatagramPacket(b,b.length);

ds.receive(dp);

byte[] bs=dp.getData();

dp.close();

客户端:

DatagramSocket ds=new DatagramSocket(客户端接口);

byte[]b;//将待发送的信息转存到byte数组。

DatagramPacket dp=new DatagramPacket(b,b.length,new InetSocketAddress("服务器的ip",服务器的接口));

dp.send(dp);//封装b数组,只需要把封装好的发送,而不是发送b数组

dp.close();

2。数据转化过程借助到流

以byte为外部,待转化的数据为内部, ByteArrayInputStream,ByteArrayOutputStream

ByteArrayInputStream输入流构造时要加入数据源(byte[])。并且与DataInputStream dis配合,dis.readDouble()函数即可,读时不需要参数。

ByteArrayOutputStream输出流,数据源是double,构造不需要参数。与DataOutputStream dos配合时,调用dos.writeDouble(double);由于dos与ByteArrayOutputStream相关,故调用flush,数据便到ByteArrayOutputStream中,再把ByteArrayOutputStream转为byte[]类型。

MyServer.java

import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class MyServer {

public static void main(String[] args) throws IOException {
DatagramSocket dgs=new DatagramSocket(8888);
byte [] container =new byte[1024];
DatagramPacket dp=new DatagramPacket(container,container.length);
dgs.receive(dp);
byte[]data=dp.getData();

System.out.println(convert(data));
dgs.close();
}
public static double convert(byte[] b) throws IOException
{
ByteArrayInputStream bs=new ByteArrayInputStream(b);
DataInputStream dis=new DataInputStream(bs);
double d=dis.readDouble();
dis.close();
return d;
}
}

MyClient.javapackage com.wanhao;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

public class MyClient {

public static void main(String[] args) throws IOException {
DatagramSocket server=new DatagramSocket(6666);
double msg=12.15;
byte[] data=convert(msg);

DatagramPacket dp=new DatagramPacket(data, data.length,new InetSocketAddress("localhost", 8888));
server.send(dp);
server.close();
}
public static byte[] convert(double d) throws IOException
{
byte[] b;
ByteArrayOutputStream bs=new ByteArrayOutputStream();
DataOutputStream dos=new DataOutputStream(bs);
dos.writeDouble(d);
dos.flush();
b=bs.toByteArray();
return b;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息