这是服务器端的代码:
public class EchoServer {
public static void main(String[] args) {
int port = 8080;
try {
ServerSocket server = new ServerSocket(port);
Socket cliSocket = server.accept();
Scanner in = new Scanner(cliSocket.getInputStream());
PrintWriter write = new PrintWriter(cliSocket.getOutputStream(),true);
String message;
while((message=in.nextLine()) != null){
write.println(message+" added");
}
write.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这是客户端:
public class EchoClient {
public static void main(String[] args) {
String ip = "localhost";
int port = 8080;
try {
Socket client = new Socket(ip, port);
PrintWriter write = new PrintWriter(client.getOutputStream(), true);
Scanner in = new Scanner(client.getInputStream());
Scanner read = new Scanner(System.in);
String input;
while((input=read.nextLine()) != null){
write.println(input);
System.out.println("sent by server:" + in.nextLine());
}
write.close();
in.close();
read.close();
client.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
现在当我运行服务器然后运行客户端时,它可以运行。但是如果关闭客户端应用程序,并且我再次运行它,服务器将不允许连接。
在这种情况下解决方案是什么?
答案 0 :(得分:1)
您的服务器程序只接受一个客户端连接,并在处理连接后退出。
如果您希望它重复接受客户端连接,您需要使用defproject
答案 1 :(得分:0)
最简单的解决方案是每次接受连接时,都会启动一个新线程来处理客户端。这将允许您处理任意数量的客户端,并且还处理一般的TCP问题,例如在客户端被杀时被卡住的套接字。
这样的事情:
myApp.directive('integer', function() {
return {
require: 'ngModel',
link: function(scope, el, attr, ctrl){
ctrl.$parsers.unshift(function(viewValue){
return parseInt(viewValue, 10);
});
}
};
});