我正在关注有关如何使用Java编写客户端/服务器程序的教程(此处为https://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html),然后进入套接字教程的最后一部分,在该教程中,您将制作客户端/服务器程序。服务器告诉敲打笑话,客户端做出回应:
服务器:“敲门!”
客户:“谁在那儿?”
服务器:“ Dexter”。
客户:“请问谁?”
服务器:“带有冬青树树枝的大厅。”
客户:“格兰”。
我已经复制了KnockKnockClient.java,KnockKnockServer.java,KnockKnockProtocol.java(我将这些文件命名为Client.java,Server.java,Protocol.java)的代码,现在我要做的最后一部分是编译和运行代码。我已经成功地编译了协议和客户端代码,但是每当我尝试编译服务器代码时,都会出现类似于第一个错误的错误
我已经尝试了所有方法,但找不到解决方法。我知道导致错误的代码行正在尝试使用KnockKnockProtocol.java文件创建对象,但这就是我真正能想到的全部。我检查了拼写,尝试从SocketsKnockKnockServer包的父文件夹中编译代码,并且确实编译了代码,但是当我尝试从父文件夹中运行它时,出现了另一个错误,看起来像第二个错误。当我尝试从package文件夹运行它时,它给了我与以前相同的错误。
//the code
package SocketsKnockKnockServer;
import java.net.*;
import java.io.*;
public class Server {
public static void main(String[] args) throws IOException {
if (args.length != 1) {
System.err.println("Usage: Java Server.java <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;
//intiate conversation with client
Protocol kkp = new Protocol();
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 to port " + portNumber + " or listening for a connection");
System.out.println(e.getMessage());
}
}
}
下面列出的错误
//the first error
Server.java:27: error: cannot find symbol
Protocol kkp = new Protocol();
^
symbol: class Protocol
location: class Server
Server.java:27: error: cannot find symbol
Protocol kkp = new Protocol();
^
symbol: class Protocol
location: class Server
2 errors
error: compilation failed
//the second error
error: class found on application class path: SocketsKnockKnockServer.Server
答案 0 :(得分:0)
您的Java文件称为KnockKnockProtocol.java,而您创建的对象称为Protocol。将KnockKnockProtocol.java重命名为Protocol.java或在Server中创建一个称为Protocol的内部类。另外,它必须是静态的。
答案 1 :(得分:0)
我通过将文件(Client.java,Server.java,Protocol.java)传输到源文件夹而不是将其保存在软件包中来解决了这个问题。
感谢Jaywalker提出这个想法