我正在编写我的第一个java客户端/服务器程序,它只是建立与服务器的连接,然后发送一个句子,服务器将句子全部大写.这实际上是本书的一个例子,当我在同一台机器上运行客户端和服务器并使用localhost作为服务器地址时,它运行良好.但是,当我将客户端程序放在另一台计算机上时,它会超时并且永远不会与服务器建立连接.我不确定为什么会这样,而且它是一种蹩脚的制作你的第一个客户端/服务器程序而实际上无法在两台不同的机器上使用它.这是客户端代码:
import java.io.*; import java.net.*; public class TCPClient { public static void main(String argv[]) throws Exception { String sentence; String modifiedSentence; BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); Socket clientSocket = new Socket("localhost", 6789); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); outToServer.writeBytes(sentence + '\n'); modifiedSentence = inFromServer.readLine(); System.out.println(modifiedSentence); clientSocket.close(); } }
这是服务器代码:
import java.io.*; import java.net.*; public class TCPServer { public static void main(String args[]) throws Exception { String clientSentence; String capitalizedSentence; ServerSocket welcomeSocket = new ServerSocket(6789); while(true) { Socket connectionSocket = welcomeSocket.accept(); BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n'; outToClient.writeBytes(capitalizedSentence); } } }
当我在两台不同的机器上运行时,我唯一改变的是客户端程序使用服务器程序(我从whatismyipaddress.com获得)使用机器的IP地址创建其套接字.非常感谢您的帮助.
更新:我确实在校园里,似乎它可能不允许我使用那个随机端口.有关找出我可以使用的端口和/或可能允许的端口的任何建议?
这可能是防火墙问题.确保在服务器端端口转发要连接的端口.localhost直接映射到ip,并通过网络堆栈移动.您正在更改代码中的某些文本,但程序的工作方式基本相同.