//UDP数据发送
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
构造用于发送长度的分组的数据报包 length指定主机上到指定的端口号,端口号只要不超过65535就行。
String str = "what are you 弄啥呢?";
DatagramSocket socket = new DatagramSocket(); //创建Socket相当于创建发送方码头
DatagramPacket packet = //创建Packet相当于发送方集装箱
new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);//1、Byte数组2、Byte数组长度3、要发送到的IP地址4、要发送到的端口号
socket.send(packet); //发货,将数据发出去
socket.close(); //socket的底层是IO流,所以要关闭socket
//UDP数据接收
DatagramSocket socket = new DatagramSocket(6666); //创建Socket相当于创建码头,端口号为6666
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024); //创建Packet相当于创建集装箱1、所能容纳的Byte数组2、Byte数组长度
socket.receive(packet); //接货,接收数据
byte[] arr = packet.getData(); //获取数据,用Byte数组存储
int len = packet.getLength(); //获取有效的字节个数
System.out.println(new String(arr,0,len)); //转换为字符串输出
String ip = packet.getAddress().getHostAddress(); //获取ip地址
int port = packet.getPort(); //获取端口号
socket.close();
注意:要先开启接收Socket,在开启发送Socket,否则可能会发生数据丢失
可以用多线程使数据在同一个界面传输,只需创建线程子类对象,重写run()方法
class receive extends Thread{
public void run(){}
}
class send extends Thread{
public void run(){}
}
//TCP传输的服务端
public class server {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(12345);
Socket socket = server.accept(); //接受客户端的请求
InputStream is = socket.getInputStream(); //获取客户端输入流
OutputStream os = socket.getOutputStream(); //获取客户端的输出流
os.write("百度一下你就知道".getBytes()); //服务器向客户端写出数据
byte[] arr = new byte[1024];
int len = is.read(arr); //读取客户端发过来的数据
System.out.println(new String(arr,0,len)); //将数据转换成字符串并打印
socket.close();
}
}
//TCP传输的客户端
public class client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1", 12345);
InputStream is = socket.getInputStream(); //获取客户端输入流
OutputStream os = socket.getOutputStream(); //获取客户端的输出流
byte[] arr = new byte[1024];
int len = is.read(arr); //读取服务器发过来的数据
System.out.println(new String(arr,0,len)); //将数据转换成字符串并打印
os.write("学习挖掘机哪家强?".getBytes()); //客户端向服务器写数据
socket.close();
}
}
//优化后的TCP传输的多线程服务端
public class server {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(12345);
while(true) {
final Socket socket = server.accept(); //接受客户端的请求
new Thread() {
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); //将字节流包装成了字符流
PrintStream ps = new PrintStream(socket.getOutputStream()); //PrintStream中有写出换行的方法
ps.println("欢迎咨询黑马程序员");
System.out.println(br.readLine());
ps.println("不好意思,爆满了");
System.out.println(br.readLine());
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
}
}
//优化后的TCP传输的客户端
public class client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1", 12345);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); //将字节流包装成了字符流
PrintStream ps = new PrintStream(socket.getOutputStream()); //PrintStream中有写出换行的方法
System.out.println(br.readLine()); //遇到\r\n停止
ps.println("我想报名黑马程序员");
System.out.println(br.readLine());
ps.println("大哭!!!能不能给次机会");
socket.close();
}
}
把java文件生成为.jar文件
右键java文件-export-JARfile-next-设置存储路径-next-next-main class-finsh
TCP&UDP实例
猜你喜欢
转载自blog.csdn.net/qq_37822034/article/details/82953331
今日推荐
周排行