我正在尝试创建一个Java程序,用于从客户端向服务器发送消息,并使用套接字编程接收响应,但它会出现此错误:
线程中的异常" main" java.net.BindException:已在使用的地址:JVM_Bind at java.net.DualStackPlainSocketImpl.bind0(Native Method) 在java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106) 在java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387) 在java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190) 在java.net.ServerSocket.bind(ServerSocket.java:375) 在java.net.ServerSocket。(ServerSocket.java:237) 在java.net.ServerSocket。(ServerSocket.java:128) 在Bob.main(Bob.java:9)
客户方:
public static void main(String[] args) throws IOException {
InetAddress addr = InetAddress.getByName("127.0.0.1") ; //set the address of the server to be connected to. Any IP address can be set here as a string
//If the name is saved in your "etc/hosts" file, then the name can be used instead of the ip address
//Alternative method: InetAddress.getByAddress -see "stackoverflow" explanation if interested
System.out.println("addr = " + addr);
Socket socket = new Socket(addr, 8080); //attempt to connect to the server by creating a socket using the IP address and Port number of the server
try {
System.out.println("socket = " + socket);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); //create an input variable for the socket- accepts input from the socket
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); // create an output variable for the socket- writes output to the socket
//this loop simply writes to the socket 10 times waits for a reply from the socket and then prints the reply received
for(int i = 0; i < 10; i ++) {
out.println("I am it: " + i); //write to socket
String str = in.readLine(); //read from socket
System.out.println(str); //print to console line read from socket
}
out.println("END"); //send string that indicates end of transmission
}catch( SocketException e ) {
System.out.println("Server closed connection");
}finally{
System.out.println("closing...");
socket.close(); //close the connection
}
}
服务器端:
public static final int PORT = 8080;
public static void main(String[] args) throws IOException {
ServerSocket s = new ServerSocket(PORT); //create server socket object
System.out.println("Started: " + s);
try {
Socket socket = s.accept(); //accept a socket connection using the Server Socket created previously
try {
System.out.println("Connection accepted: "+ socket);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); //create an input variable for the socket- accepts input from the socket
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); // create an output variable for the socket- writes output to the socket
//this loop accepts input from the socket, prints out what it receives anc echoes it back into the socket until it recives the word "END" indicating the end of transmission
while (true) {
String str = in.readLine(); //read line from socket
if (str.equals("END")) break;
System.out.println("Echoing: " + str); //print line to console
out.println("You said: " + str); //echo line read back into socket
}
}catch ( SocketException e ) {
System.out.println("Client closed connection");
}finally{ //close the present connection
System.out.println("closing...");
socket.close();
}
}catch( SocketException e ){
System.out.println("Server socket closed unexpectedly");
}finally{ //close the server socket. i.e. stop listening for connections
s.close(); //without this line, the server would continue waiting for another connection
}
}
答案 0 :(得分:2)
java.net.BindException
表示您正在尝试绑定到已占用的端口。
您有两个服务器正在运行的实例,或者其他一些程序已在使用端口8080。