您的位置:首页 > 理论基础 > 计算机网络

网络编程_UDP编程原理_发送类型_cs与bs区别JAVA187-188

2016-02-25 21:06 621 查看
来源:http://www.bjsxt.com/

一、S02E187_网络编程_UDP编程原理

package com.test.net.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
/**
* UDP:以数据为中心,非面向连接,不安全,数据可能丢失,效率高
* 类:DatagramSocket,DatagramPacket
* 客户端
* 1、创建客户端+端口,DatagramSocket+指定端口
* 2、准备数据:字节数组
* 3、打包(发送的地点及端口):DatagramPacket+服务器地址及端口
* 4、发送
* 5、释放
*
* 思考:89.12 数据+类型
*/
public class MyClient {
public static void main(String[] args) throws IOException {
//1、创建客户端+端口
DatagramSocket client = new DatagramSocket(6666);//端口可能被占用,报异常
//2、准备数据
String msg = "udp编程";
byte[] data = msg.getBytes();
//3、打包(发送的地点及端口)
DatagramPacket packet =
new DatagramPacket(data,0,data.length,new InetSocketAddress("LWT-PC",8888));
//4、发送
client.send(packet);
//5、释放
client.close();
}
}


package com.test.net.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* 服务端
* 1、创建服务端+端口:DatagramSocket+指定端口
* 2、准备接收容器:字节数组,DatagramPacket封装
* 3、封装成包
* 4、接收数据
* 5、分析数据
* 6、释放资源
*/
class MyServer {
public static void main(String[] args) throws IOException {
//1、创建服务端+端口
DatagramSocket server = new DatagramSocket(8888);//端口可能被占用,报异常
//2、准备接受容器
byte[] container = new byte[1024];
//3、封装成包DatagramPacket(byte[] buf, int length)
DatagramPacket packet = new DatagramPacket(container,container.length);
//4、接收数据
server.receive(packet);//阻塞式接收
//5、分析数据
byte[] data = packet.getData();
int len = packet.getLength();
System.out.println(new String(data,0,len));
//6、释放资源
server.close();
}
}


二、S02E188网络编程_UDP编程、发送类型、cs与bs区别

package com.test.net.udp;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
/**
* 发送double
* 客户端
* 1、创建客户端+端口
* 2、准备数据,发送double-->字节数组,使用字节数组输出流和数据输出流
* 3、打包(发送的地点及端口)
* 4、发送
* 5、释放
*/
public class Client2SendDouble {
public static void main(String[] args) throws IOException {
//1、创建客户端+端口
DatagramSocket client = new DatagramSocket(6666);//端口可能被占用,报异常
//2、准备数据
double num = 89.12;
byte[] data = convert(num);
//3、打包(发送的地点及端口)
DatagramPacket packet =
new DatagramPacket(data,0,data.length,new InetSocketAddress("HELLOWORLD",8888));
//4、发送
client.send(packet);
//5、释放
client.close();
}
/**
* double数据源-->字节数组,使用字节数组输出流和数据输出流
* @throws IOException
*/
public static byte[] convert(double num) throws IOException{
byte[] data = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeDouble(num);
dos.flush();
//获取数据
data = baos.toByteArray();
dos.close();
return data;
}
}


package com.test.net.udp;

import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* 处理成double
* 服务端
* 1、创建服务端+端口
* 2、准备接收容器
* 3、封装成包
* 4、接收数据
* 5、分析数据,字节数组-->double
* 6、释放资源
*/
class Server2ReceiveDouble {
public static void main(String[] args) throws IOException {
//1、创建服务端+端口
DatagramSocket server = new DatagramSocket(8888);//端口可能被占用,报异常
//2、准备接受容器
byte[] container = new byte[1024];
//3、封装成包DatagramPacket(byte[] buf, int length)
DatagramPacket packet = new DatagramPacket(container,container.length);
//4、接收数据
server.receive(packet);//阻塞式接收
//5、分析数据
double data = convert(packet.getData());
System.out.println(data);
//6、释放资源
server.close();
}
/**
* 字节数组-->double数据源,使用字节数组输入流和数据输入流
* @throws IOException
*/
public static double convert(byte[] data) throws IOException{
DataInputStream dis = new DataInputStream(new ByteArrayInputStream(data));
double num = dis.readDouble();
dis.close();
return num;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: