报错Exception in thread “main“ java.net.BindException: Address already in use: bind的解决方案
因为上边代码客户端指定了端口,多开客户端口己经被占用所以报错。在网络编程UDP中多开客户端出现异常。
·
问题描述
在网络编程UDP中多开客户端出现异常
Exception in thread "main" java.net.BindException: Address already in use: bind
问题分析
客户端代码
package com.itheima.d3_udp2;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
/**
* 目标:完成UDP通信快速入门:实现1发1收。
*/
public class Client {
public static void main(String[] args) throws Exception {
//1. 创建DatagramSocket对象
DatagramSocket client = new DatagramSocket(7777);
// 2.封装要发送的数据
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入需要发送的数据:");
String str = sc.nextLine();
if ("exit".equals(str)) {
client.close();
break;
}
byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, InetAddress.getByName(""), 6666);
client.send(datagramPacket);
System.out.println("发送完毕");
}
}
}
服务端代码
package com.itheima.d3_udp2;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* 目标:完成UDP通信快速入门-服务端开发
*/
public class Server {
public static void main(String[] args) throws Exception {
//1.创建服务对象
DatagramSocket server = new DatagramSocket(6666);
byte[] bytes = new byte[64*1024];
DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length);
//接收数据
while (true) {
server.receive(datagramPacket);
int length = datagramPacket.getLength();//获取数据长度
System.out.println(new String(bytes,0,length));
System.out.println("ip地址:"+datagramPacket.getAddress().getHostAddress());
System.out.println("客户端使用端口:"+datagramPacket.getPort());
// String s = new String(bytes);
// System.out.println(s.trim());
//释放资源
// server.close();
}
}
}
因为上边代码客户端指定了端口,多开客户端口己经被占用所以报错
解决方案
将客户端代码修改
package com.itheima.d3_udp2;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
/**
* 目标:完成UDP通信快速入门:实现1发1收。
*/
public class Client {
public static void main(String[] args) throws Exception {
//1. 创建DatagramSocket对象
DatagramSocket client = new DatagramSocket();
// 2.封装要发送的数据
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入需要发送的数据:");
String str = sc.nextLine();
if ("exit".equals(str)) {
client.close();
break;
}
byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, InetAddress.getByName(""), 6666);
client.send(datagramPacket);
System.out.println("发送完毕");
}
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)