Main.java 发送端
package com.company;
import com.company.thread.myThread1;
import com.company.thread.myThread2;
import com.company.thread.receiveThread;
import com.company.thread.sendThread;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;
public class Main {
// write your code here
//网络三要素
//1 ip地址
//2端口
//3 UDP/ TCp协议
//发送端
//创建 DatagramSocket,随机端口号
//创建 DatagramPacket,指定数据内容,长度,地址,端口
//使用DatagramSocket对象 发送DatagramPacket
//关闭DatagranSocket
public static void main(String[] args) throws IOException {
demo1();
//demo2();
//创建线程对象 但调用start的时候线程才会跑起来
//也是调用start的时候系统会调用run方法
// new myThread1().start();
// new myThread2().start();
// new receiveThread(6889).start();
// new sendThread(6809).start();
}
public static void demo1 ()throws IOException{
//要发送的内容
String str = "在啊?";
//创建DatagramSocket,随机端口号
DatagramSocket socket = new DatagramSocket();
//创建DatagramPocket,指定数据内容,长度 地址 端口
DatagramPacket packet = new DatagramPacket(str.getBytes(),str.getBytes().length, InetAddress.getByName("172.16.16.120"),6777);
//使用DatagramSocket对象,发送DatagramPacket
socket.send(packet);
//使用io流进行数据传输,所以使用完毕需要关闭流
socket.close();
}
public static void demo2() throws IOException {
Scanner scanner = new Scanner(System.in);
DatagramSocket socket = new DatagramSocket();
while (true) {
//从键盘输入传输内容,若输入的是quit则退出
String line = scanner.nextLine();
if ("quit".equals(line)) {
break;
}
DatagramPacket packet = new DatagramPacket(line.getBytes(),
line.getBytes().length, InetAddress.getByName("172.16.16.120"), 6777);
socket.send(packet);
}
//关流操作放在循环外面
socket.close();
}
}
receiveMain.java 接收端
package com.company;
import com.company.thread.receiveThread;
import com.company.thread.sendThread;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Socket;
import java.net.SocketException;
/**
* Created by dllo on 17/5/20.
*/
public class receivemain {
//接受端
//创建 DatagramSocket,指定端口号
//创建 DatagramPacket,指定数组及长度
//使用DatagramSocket对象 接受DatagramPacket
//关闭DatagranSocket
//从接受到的DatagramPacket获取数据
public static void main(String[] args) throws IOException {
// demo1();
demo2();
// new receiveThread(6809).start();
// new sendThread(6889).start();
}
public static void demo1() throws IOException{
//创建DatageamSocket,指定端口号
//端口号要与发送端对应
DatagramSocket datagramSocket = new DatagramSocket(6777);
//创建DatagramPacket, 指定数组 及长度
DatagramPacket packet = new DatagramPacket(new byte[1024],1024);
//使用DatagramSocket对象 ,接收DatagramPacket
datagramSocket .receive(packet);
//获取数据内容
byte[]arr = packet.getData();
//获取数据长度
int len = packet.getLength();
//将取到的数据输出打印
System.out.println(new String(arr,0,len));
//关流
datagramSocket.close();
}
//无限接收
public static void demo2() throws IOException {
DatagramSocket socket = new DatagramSocket(6777);
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
while (true) {
socket.receive(packet);
byte[] arr = packet.getData();
int len = packet.getLength();
String ip = packet.getAddress().getHostAddress();
int port = packet.getPort();
System.out.println(ip + ":" + port + ":" + new String(arr, 0, len));
}
}
}