我正在尝试在Java8中实现一个简单的客户端/服务器应用程序。 我正在使用此代码:
`package prova;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Main {
public static void main(String args[]){
ServerSocket ssock;
try {
System.out.println("Listening");
ssock = new ServerSocket(8080);
while(true){
Socket sock;
try {
sock = ssock.accept();
System.out.println("Connected");
new Thread(new Server(sock)).start();
}catch(IOException e1){e1.printStackTrace();}
}
}catch(IOException e2){e2.printStackTrace();}
}
}`
Server.java
package prova;
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
public class Server implements Runnable{
Socket clientSocket;
public Server(Socket cSocket){
this.clientSocket = cSocket;
}
public void run(){
try {
PrintStream pstream = new PrintStream
(clientSocket.getOutputStream());
for (int i = 100; i >= 0; i--) {
pstream.println(i +
" bottles of beer on the wall");
}
pstream.close();
clientSocket.close();
}
catch (IOException e) {
System.out.println(e);
}
}
}
当应用程序到达时执行ssock.accept(); 应用程序崩溃。我真的不知道这段代码有什么问题。我在互联网上搜索过,但除了班级服务器之外,我的代码与我发现的很多解决方案/示例之间没有区别。顺便说一下,因为应用程序没有到达执行线程,我想这与我的问题无关,也许我错了。 提前谢谢大家
答案 0 :(得分:2)
这是一个奇怪的事实,它不提供任何堆栈跟踪。我正在使用eclipse mars 4.5.2在win10上运行此代码。代码在此指令处停止sock = ssock.accept();
是的,它应该停在那里 - 它正在等待客户端程序连接到同一个套接字,服务器套接字8080,这就是templateUrl: "template/file.html"
所做的,但你不会在任何地方这样做。修复很简单 - 让您的客户端尝试连接服务器正在等待的同一个套接字。