UDP通信:
客户端数据发出去,不用管它是否收到。
(多用于游戏等)
Server1:
package day20150915UDPsocket;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class Server {
public void start(){
try{
/*
* 接收包的步骤
* 1:创建socket(1次)
* 2:创建一个合适大小的包
* 3:通过socket接收数据到包中
* 4:拆包区数据
*/
DatagramSocket socket = new DatagramSocket(8088);
byte[] data = new byte[100];
DatagramPacket recvPacket = new DatagramPacket(data,data.length);
/*
* 接收数据到包中
* 注意:该方法是个阻塞方法,先卡住,就收到数据后才结束
*/
socket.receive(recvPacket);
//拆包拿数据
byte[] d = recvPacket.getData();//就是上面的data数组
//有效数据的长度
int dlen = recvPacket.getLength();
/*
* String(byte[],int offset, int len, String charsetName)
* 从给定的字节数组中,从offset开始连续len个字节,
* 再根据字符集转为字符串
*/
String info = new String(d,0,dlen,"utf-8");
System.out.println("客户端说:"+info);
}catch(Exception e){
}
}
public static void main(String[] args) {
Server server = new Server();
server.start();
}
}
Client1:
package day20150915UDPsocket;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Client {
public void start(){
try{
/*
* 想服务器发送数据的步骤:
* 1:创建好socket
* 2:准备数据
* 3:创建数据包
* 4:将数据存入包中(3,4是一步完成的)
* 5:将数据包通过socket发送给服务器
*/
DatagramSocket socket = new DatagramSocket();
String str = "你好服务器";
byte[] data = str.getBytes("utf-8");
//打包,准备包裹,填写地址,装入数据
InetAddress address = InetAddress.getByName("localhost");
int port = 8088;
DatagramPacket sendPacket = new DatagramPacket(data,data.length,address,port);
//将包发出去
socket.send(sendPacket);
}catch(Exception e){
}
}
public static void main(String[] args) {
Client client = new Client();
client.start();
}
}
Server2收数据的同时发送数据
package day20150915UDPsocket;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Server {
public void start(){
try{
/*
* 接收包的步骤
* 1:创建socket(1次)
* 2:创建一个合适大小的包
* 3:通过socket接收数据到包中
* 4:拆包区数据
*/
DatagramSocket socket = new DatagramSocket(8088);
byte[] data = new byte[100];
DatagramPacket recvPacket = new DatagramPacket(data,data.length);
/*
* 接收数据到包中
* 注意:该方法是个阻塞方法,先卡住,就收到数据后才结束
*/
socket.receive(recvPacket);
//拆包拿数据
byte[] d = recvPacket.getData();//就是上面的data数组
//有效数据的长度
int dlen = recvPacket.getLength();
/*
* String(byte[],int offset, int len, String charsetName)
* 从给定的字节数组中,从offset开始连续len个字节,
* 再根据字符集转为字符串
*/
String info = new String(d,0,dlen,"utf-8");
System.out.println("客户端说:"+info);
//回复客户端
String str = "你好,客户端!";
data = str.getBytes("utf-8");
//打包,准备包裹,填写地址,装入数据
InetAddress address = recvPacket.getAddress();
int port = recvPacket.getPort();
//创建发送包
DatagramPacket sendPacket = new DatagramPacket(data,data.length,address,port);
//将包发送出去
socket.send(sendPacket);
}catch(Exception e){
}
}
public static void main(String[] args) {
Server server = new Server();
server.start();
}
}
Client2:发送数据然后接收数据
package day20150915UDPsocket;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Client {
public void start(){
try{
/*
* 想服务器发送数据的步骤:
* 1:创建好socket
* 2:准备数据
* 3:创建数据包
* 4:将数据存入包中(3,4是一步完成的)
* 5:将数据包通过socket发送给服务器
*/
DatagramSocket socket = new DatagramSocket();
String str = "你好服务器";
byte[] data = str.getBytes("utf-8");
//打包,准备包裹,填写地址,装入数据
InetAddress address = InetAddress.getByName("localhost");
int port = 8088;
DatagramPacket sendPacket = new DatagramPacket(data,data.length,address,port);
//将包发出去
socket.send(sendPacket);
/*
* 接收服务端发送回来的信息
*/
data = new byte[100];
DatagramPacket recvPacket = new DatagramPacket(data,data.length);
//接收数据到包中
//注意,该方法是个阻塞方法
socket.receive(recvPacket);
//拆包拿数据
byte[] d = recvPacket.getData();
//有效数据长度
int dlen = recvPacket.getLength();
/*
* String(byte[],int offset, int len, String charsetName)
* 从给定的字节数组中,从offset开始连续len个字节,
* 再根据字符集转为字符串
*/
String info = new String(d,0,dlen,"utf-8");
System.out.println("服务端说:"+info);
}catch(Exception e){
}
}
public static void main(String[] args) {
Client client = new Client();
client.start();
}
}