我正在學習如何在 Java 中制作客戶端/服務器程序的教程(這里是: https: //docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html)我到了最后一部分套接字教程,您可以在其中制作客戶端/服務器程序,其中服務器講敲門笑話,客戶端響應:服務員:“敲敲!”客戶:“誰在那里?”服務器:“德克斯特?!笨蛻簦骸暗驴怂固厥钦l?”服務器:“有冬青樹枝的德克斯特大廳?!笨蛻簦骸吧胍??!蔽乙呀?jīng)復制了 KnockKnockClient.java、KnockKnockServer.java、KnockKnockProtocol.java 的代碼(我將這些文件命名為 Client.java、Server.java、Protocol.java),現(xiàn)在我要做的最后一部分是編譯和運行代碼. 我成功地編譯了協(xié)議和客戶端代碼,但是每當我嘗試編譯服務器代碼時,我都會收到一個看起來像第一個錯誤的錯誤我已經(jīng)嘗試了所有方法,但找不到修復它的方法。我知道導致錯誤的代碼行試圖使用 KnockKnockProtocol.java 文件創(chuàng)建一個對象,但這就是我真正能弄清楚的全部內(nèi)容。我檢查了拼寫,嘗試從 SocketsKnockKnockServer 包的父文件夾編譯代碼并且確實編譯了代碼,但是當我嘗試從父文件夾運行它時,我得到了一個看起來像第二個錯誤的不同錯誤。當我試圖從包文件夾運行它時,它給了我和以前一樣的錯誤。//the codepackage 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; } }
2 回答

蠱毒傳說
TA貢獻1895條經(jīng)驗 獲得超3個贊
我通過將文件(Client.java、Server.java、Protocol.java)傳輸?shù)皆次募A而不是將它們保存在包中來解決問題。

猛跑小豬
TA貢獻1858條經(jīng)驗 獲得超8個贊
您的 java 文件名為 KnockKnockProtocol.java,但您正在創(chuàng)建的對象名為 Protocol。要么將 KnockKnockProtocol.java 重命名為 Protocol.java,要么在 Server 中創(chuàng)建一個名為 Protocol 的內(nèi)部類。此外,它需要是靜態(tài)的。
添加回答
舉報
0/150
提交
取消