use*_*868 5 java sockets eclipse linux port
我昨天问了这个问题,没有人能够弄清楚我遇到的问题.所以我希望提供一个更新的代码,其中包含昨天添加的建议.基本上,我一直在尝试在服务器和客户端之间建立连接,但每当我执行服务器然后客户端,我都会得到这个例外:Address already in use.显而易见的答案是给它一个新的端口,但即使这样我仍然会得到这个错误.我假设它与我的代码出错了.有人能发现它吗?我已经附加了服务器类和客户端类.
这是我得到的错误:
Exception in thread "main" java.net.BindException: Address already in use
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
at java.net.ServerSocket.bind(ServerSocket.java:376)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at java.net.ServerSocket.<init>(ServerSocket.java:128)
at MessageServer.main(MessageServer.java:16)
Run Code Online (Sandbox Code Playgroud)
服务器代码:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;
public class MessageServer {
public static void main(String[] args) throws IOException {
try {
int port = 53705;
ServerSocket server = new ServerSocket(port);
while (true) {
System.out.println("Waiting for client...");
//server.setReuseAddress(true);
Socket client = server.accept();
System.out.println("Client from " + server.getInetAddress() + " connected.");
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String inputLine = in.readLine();
System.out.println("Client said: '"+inputLine+"'");
Writer count = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
byte c [] = count.toString().getBytes();
count.flush();
count.close();
in.close();
}
} catch (IOException e) {
System.err.println(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
客户代码:
import java.net.*;
import java.io.*;
public class MessageSendClient {
public static void man(String args[]) throws IOException {
String servername = "localhost";
int port = 53705;
Socket server;
//server.setReuseAddress(true);
try {
server = new Socket (servername,port);
System.out.println("Connected to " + server.getInetAddress());
DataInputStream in = new DataInputStream(new BufferedInputStream(server.getInputStream()));
server.close();
byte c[] = new byte[100];
int num = in.read(c);
String count = new String(c);
System.out.println("Server said: " + count);
} catch (Exception e) { }
}
}
Run Code Online (Sandbox Code Playgroud)
当服务器程序尝试在端口53705上打开套接字进行侦听时,您将收到错误消息.该Address already in use消息意味着这一点,你的机器上另一个进程已在使用端口53705.这可能是因为一些守护进程已经巧合打开此相同的端口,或Web浏览器已打开此端口,并且还在使用它.
但最有可能的是,您的服务器程序的另一个实例在后台运行.检查所有终端窗口,或检查IDE以查看包含正在运行的程序状态的选项卡.
顺便说一句,"唯一端口"有点误导,因为端口53705在任何方面都不是"唯一",它恰好是你(或某人)选择的端口号,你希望它还没有被使用.要获得真正独特的端口,请使用new ServerSocket(0)它来要求系统分配未使用的端口.要找出分配的端口,请使用serverSocket.getLocalPort().您可以将其打印出来,然后将其作为命令行选项传递给客户端程序.
| 归档时间: |
|
| 查看次数: |
18220 次 |
| 最近记录: |