【发布时间】:2010-01-29 20:39:42
【问题描述】:
我正在编写我的第一个 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 地址创建其套接字。非常感谢您的帮助。
更新:我确实在校园里,似乎它可能不允许我使用那个随机端口。有关找出我可以使用的端口和/或很可能允许的端口的任何建议?
【问题讨论】:
-
你可以通过这个IP地址连接到服务器吗? (使用 ping/telnet/traceroute/等)
-
在尝试调试程序之前,请先尝试确保您可以 ping 另一台计算机。这样你就知道网络不是罪魁祸首。