【发布时间】:2013-06-30 12:01:39
【问题描述】:
我需要一些帮助,我想我遇到了一个与网络相关的简单问题。它还将帮助我更好地了解这一切是如何工作的,因为它知道什么不是 .close()'ed。我敢肯定这很简单,但对我来说它都是全新的。这是客户端程序。如果我能解决这个问题,我很可能会附加服务器。谢谢
public class Server {
public static void main(String[] args) {
start();
}
static int start = 0;
public static void start() {
try {
ServerSocket serverSocket = new ServerSocket(4567);
Socket socket = serverSocket.accept();
//1) Take and echo input (In this case a message)
BufferedReader bf = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String message = bf.readLine();
System.out.println("Message recieved from Client:" + message);
//2) Response of client message
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
printWriter.println("Server echoing back the message ' " + message + " ' from Client");
} catch (IOException e) {
System.out.println("e " + e);
System.exit(-1);
}
start++;
clearUp();
if (start < 5) {
System.out.println("Closing binds and Restarting" + start);
start();
}
}
public void clearUp(){
//How would I clear the stuff that is left bound
so I can restart via start() and avoid the
java.net.BindException: Address already in use: JVM_Bind ?
}
}
如何清除绑定的内容,以便我可以通过 start() 重新启动并避免 java.net.BindException: Address already in use: JVM_Bind ?
【问题讨论】:
-
您是否打算让
start递归调用自身? -
你能发布错误信息吗?
-
这段代码的结构方式存在几个主要问题。主要问题是您没有关闭服务器套接字。我建议您阅读描述 Java 套接字编程的 许多 教程之一,并应用其中描述的技术。具体来说,您只需要打开一次服务器套接字,并启动一个单独的线程来处理每个连接。
标签: java networking stream