UDP
发短信:不用连接 但是到知道地址
1.发送信息
public class UDPclient {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket();
String msg="你好 服务器";
InetAddress inetAddress =InetAddress.getByName("localhost");
int port=9090;
DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, inetAddress, port);
socket.send(packet);
socket.close();
}
}
public class UDPservre {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(9090);
byte[] bytes = new byte[1024];
DatagramPacket packet =new DatagramPacket(bytes,0,bytes.length);
socket.receive(packet);
System.out.println(new String(packet.getData(),0,packet.getLength()));
socket.close();
}
}
2.循环接受
public class UdpSeceiveDemo01 {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(6666);
while (true){
//准备接受包裹的数组
byte[] bytes = new byte[1024];
//数据程序包
DatagramPacket packet = new DatagramPacket(bytes,0,bytes.length);
socket.receive(packet);//阻塞式接受包裹
byte[] data = packet.getData();
String receivedata = new String(data, 0, data.length);
System.out.println(receivedata);
//输出bye 断开连接
if (new String(packet.getData(),0,packet.getLength()).equals("bye")){//单纯的s.equals("bye") s里面有1021个0 无法停止
break;
}
}
socket.close();
}
}
3.多线程在线咨询
public class TalkReceive implements Runnable{
private int port;
private String msgFrom=null;
private DatagramSocket socket=null;
public TalkReceive(int port, String msgFrom) {
this.port = port;
this.msgFrom = msgFrom;
try {
socket = new DatagramSocket(port);
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while (true){
//准备接受包裹的数组
byte[] bytes = new byte[1024];
//数据程序包
DatagramPacket packet = null;
try {
packet = new DatagramPacket(bytes,0,bytes.length);
socket.receive(packet);//阻塞式接受包裹
} catch (IOException e) {
e.printStackTrace();
}
byte[] data = packet.getData();
String receivedata = new String(data, 0, data.length);
System.out.println(msgFrom+":"+receivedata);
//输出bye 断开连接
if (new String(packet.getData(),0,packet.getLength()).equals("bye")){//单纯的s.equals("bye") s里面有1021个0 无法停止
break;
}
}
socket.close();
}
}
public class TalkSend implements Runnable {
private int fromPort = 0;
private String toIP=null;
private int toPort=0;
private DatagramSocket socket = null;
private BufferedReader reader= null;
public TalkSend(int fromPort, String toIP, int toPort) {
this.fromPort = fromPort;
this.toIP = toIP;
this.toPort = toPort;
try {
socket = new DatagramSocket(fromPort);
} catch (SocketException e) {
e.printStackTrace();
}
reader = new BufferedReader(new InputStreamReader(System.in));
}
@Override
public void run() {
try {
while (true) {
String s = reader.readLine();
DatagramPacket packet = new DatagramPacket(s.getBytes(), 0, s.getBytes().length, new InetSocketAddress(toIP, toPort));
socket.send(packet);
if (s.equals("bye")) {
break;
}
}
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}