Java ServerSocket未出现在Netstat中?
非常困惑,我刚刚发布了这个问题,但删除了它,因为我犯了很多错误。好吧,又来了!下面我有一个java服务器程序。当我运行它时,我希望在netstat中看到某种存在,但我什么也看不到。以下是一些屏幕截图: 在运行服务器之前: 在右上角的终端上运行server server之后,右下角是client,明显地左边是netstat: 有点长,但这是我使用63400运行的服务器:Java ServerSocket未出现在Netstat中?,java,sockets,server,serversocket,netstat,Java,Sockets,Server,Serversocket,Netstat,非常困惑,我刚刚发布了这个问题,但删除了它,因为我犯了很多错误。好吧,又来了!下面我有一个java服务器程序。当我运行它时,我希望在netstat中看到某种存在,但我什么也看不到。以下是一些屏幕截图: 在运行服务器之前: 在右上角的终端上运行server server之后,右下角是client,明显地左边是netstat: 有点长,但这是我使用63400运行的服务器: import java.net.*; import java.io.*; public class JavaTest2 {
import java.net.*;
import java.io.*;
public class JavaTest2 {
public static void main(String[] args) throws IOException {
if (args.length != 1) {
System.err.println("Usage: java KnockKnockServer <port number>");
System.exit(1);
}
int portNumber = Integer.parseInt(args[0]);
try (
ServerSocket serverSocket = new ServerSocket(portNumber);
Socket clientSocket = serverSocket.accept();
PrintWriter out =
new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
) {
String inputLine, outputLine;
// Initiate conversation with client
KnockKnockProtocol kkp = new KnockKnockProtocol();
outputLine = kkp.processInput(null);
out.println(outputLine);
while ((inputLine = in.readLine()) != null) {
outputLine = kkp.processInput(inputLine);
out.println(outputLine);
if (outputLine.equals("Bye."))
break;
}
} catch (IOException e) {
System.out.println("Exception caught when trying to listen on port "
+ portNumber + " or listening for a connection");
System.out.println(e.getMessage());
}
}
}
class KnockKnockProtocol {
private static final int WAITING = 0;
private static final int SENTKNOCKKNOCK = 1;
private static final int SENTCLUE = 2;
private static final int ANOTHER = 3;
private static final int NUMJOKES = 5;
private int state = WAITING;
private int currentJoke = 0;
private String[] clues = { "Turnip", "Little Old Lady", "Atch", "Who", "Who" };
private String[] answers = { "Turnip the heat, it's cold in here!",
"I didn't know you could yodel!",
"Bless you!",
"Is there an owl in here?",
"Is there an echo in here?" };
public String processInput(String theInput) {
String theOutput = null;
if (state == WAITING) {
theOutput = "Knock! Knock!";
state = SENTKNOCKKNOCK;
} else if (state == SENTKNOCKKNOCK) {
if (theInput.equalsIgnoreCase("Who's there?")) {
theOutput = clues[currentJoke];
state = SENTCLUE;
} else {
theOutput = "You're supposed to say \"Who's there?\"! " +
"Try again. Knock! Knock!";
}
} else if (state == SENTCLUE) {
if (theInput.equalsIgnoreCase(clues[currentJoke] + " who?")) {
theOutput = answers[currentJoke] + " Want another? (y/n)";
state = ANOTHER;
} else {
theOutput = "You're supposed to say \"" +
clues[currentJoke] +
" who?\"" +
"! Try again. Knock! Knock!";
state = SENTKNOCKKNOCK;
}
} else if (state == ANOTHER) {
if (theInput.equalsIgnoreCase("y")) {
theOutput = "Knock! Knock!";
if (currentJoke == (NUMJOKES - 1))
currentJoke = 0;
else
currentJoke++;
state = SENTKNOCKKNOCK;
} else {
theOutput = "Bye.";
state = WAITING;
}
}
return theOutput;
}
}
现在,当我运行客户机时,我可以看到netstat在最顶端的状态,两个套接字作为我的服务器和客户机在同一台计算机上运行。但仍然没有服务器套接字:
截图:
使用127.0.0.1 64300运行的客户端代码:
import java.io.*;
import java.net.*;
public class JavaTest {
public static void main(String[] args) throws IOException {
if (args.length != 2) {
System.err.println(
"Usage: java KnockKnockClient <host name> <port number>");
System.exit(1);
}
String hostName = args[0];
int portNumber = Integer.parseInt(args[1]);
try (
Socket kkSocket = new Socket(hostName, portNumber);
PrintWriter out = new PrintWriter(kkSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(kkSocket.getInputStream()));
) {
BufferedReader stdIn =
new BufferedReader(new InputStreamReader(System.in));
String fromServer;
String fromUser;
while ((fromServer = in.readLine()) != null) {
System.out.println("Server: " + fromServer);
if (fromServer.equals("Bye."))
break;
fromUser = stdIn.readLine();
if (fromUser != null) {
System.out.println("Client: " + fromUser);
out.println(fromUser);
}
}
} catch (UnknownHostException e) {
System.err.println("Don't know about host " + hostName);
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to " +
hostName);
System.exit(1);
}
}
}
提前感谢所有花时间来解决这个问题的人
我想它可能只是netstat,但我仍然想知道为什么我运行lsof-I:64300时会这样
它显示了我的java进程,当时只有服务器在运行。当我运行它的时候,我看到了3,你可以在这个屏幕截图的左边终端看到。在netstat显示我认为相关的内容之后,我取消了它,因为我无法解释其余的内容。我不知道它是否在那里。希望有人能帮忙
好的,我只是在写这篇文章的时候发现了更多,因为我不能在90分钟内发表文章,但是现在当我使用intellij idea并在那里运行它时。只有服务器,没有变化,但是当我添加客户端时,我看到了一切
在任何事情之前:
服务器:
客户端+服务器:
发生了什么事。。。。我还看到6个本地主机,而不是3个。。。天哪,这很有趣,否则我只是犯了一个愚蠢的错误。但是我开始怀疑这些问题。netstat默认情况下会忽略监听套接字。所有插座都有-l选项或-all选项默认情况下,launenetstat忽略侦听套接字。有一个-l选项或-all for all套接字。我不是netstat专家,但我注意到您的netstat列表的标题是Active Internet connections。可能只是在侦听的服务器还没有激活?看起来我在一个服务器中就找到了它。第一条评论指出了另一种解决方案:确保您阅读了有关您使用的工具的文档,以便了解它们的实际工作方式。请确保您是正确的。当我运行它时,除了netstat-l,我没有看到它。感谢您没有将服务器套接字绑定到特定的IP地址,因此它显示为“*”。同样,netstat文档中几乎肯定提到了这一点。