UDP:当我打开2个UDPSend的时候,第二个会报异常 Address used 该如何
import java.net.*;
import java.io.*;
public class UDPReceive extends Thread{
DatagramSocket ds;
InetAddress inetAdd;
public UDPReceive(){
}
public void receive(){
byte[] buf =new byte[512];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
try{
ds=new DatagramSocket(3003);
while(true){
ds.receive(dp);
String str =new String(buf,0,dp.getLength());
System.out.println(dp.getAddress()+ "SAY: "+str);
}
}catch(Exception ex){ex.printStackTrace();}
}
public static void main(String[] args){
new UDPReceive().receive();
}
}
------------------------------------
import java.io.BufferedReader;
import
java.io.IOException;
import java.net.*;
import java.io.*;
public class UDPSend {
DatagramSocket ds;
BufferedReader br;
byte[] buf;
DatagramPacket dp;
public UDPSend(){
try{
ds=new DatagramSocket(5001);
}catch(Exception ex){ex.printStackTrace();}
}
public static void main(String[] args){
UDPSend udpsend=new UDPSend();
udpsend.send();
}
public void send(){
try {
while(true){
br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
buf=str.getBytes();
dp = new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),3003);
ds.send(dp);
}
} catch (
IOException e) {
e.printStackTrace();
}finally{
try {ds.close();br.close();}catch (IOException e) {e.printStackTrace();}
}
}
}
------解决方案--------------------因为5001 被第一个占用了
你ds=new DatagramSocket();不填写端口的话
程序会自己选一个,这样就不会出错了