我正在编写我的第一个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);
}
}
}
我在两台不同的机器上运行时唯一改变的是客户端程序使用服务器程序所在机器的IP地址来创建套接字(IP地址从whatismyipaddress.com获取)。非常感谢您的帮助。
更新:我确实在校园内,似乎它不允许我使用那个随机端口。有没有关于如何找出可以使用的端口或更有可能被允许的端口的建议?