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;
}
}
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;
}
}
相关文章推荐
- C#基于UDP实现的P2P语音聊天工具
- C#基于UDP进行异步通信的方法
- 距离详解Linux下的UDP方式通讯
- C#中使用UDP通信实例
- Linux网络编程之UDP Socket程序示例
- 服务器 UDP端口占用几千个的解决办法
- Android网络编程之UDP通信模型实例
- udp socket客户端和udp服务端程序示例分享
- PHP的Socket通信之UDP通信实例
- 使用C#实现基于TCP和UDP协议的网络通信程序的基本示例
- Android编程实现基于局域网udp广播自动建立socket连接的方法
- Android模拟器接收UDP数据包的若干问题分析
- Android中实现TCP和UDP传输实例
- android开发socket编程之udp发送实例分析
- Linux网络编程之基于UDP实现可靠的文件传输示例
- Linux中使用C语言实现基于UDP协议的Socket通信示例
- Java Socket编程实例(五)- NIO UDP实践
- Java Socket编程实例(二)- UDP基本使用
- Java基于UDP协议实现简单的聊天室程序
- java编程实现基于UDP协议传输数据的方法