alI创建了一个简单的基于文本的RPG,经过大量的工作设法将其放在网站上(www.worldofthedrakon.com)。我刚刚创建了一个服务器和客户端,但是我遇到了用户从他们的计算机访问服务器的问题。我将我的套接字设置为:
Socket socket = new Socket("localhost", 8800);
现在我已经测试过将localhost更改为我的IP,但无济于事。我得到的错误是连接超时,连接被拒绝。有人能指出我正确的方向吗?如果我的问题看起来模糊不清,我会道歉,可以提供更多代码。很多它所以我不想轰炸你:)谢谢你。 服务器端:
public Server() {
setLayout(new BorderLayout());
add(new JScrollPane(jta), BorderLayout.CENTER);
setTitle("Multi-Thread Server");
setSize(500, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
try {
ServerSocket serverSocket = new ServerSocket(8800);
jta.append("MultiThreadServer started at " + new Date() + '\n');
int clientNo = 1;
while(true) {
Socket socket = serverSocket.accept();
jta.append("Server Thread for client " + clientNo + " at " + new Date() + '\n');
InetAddress inetAdress = socket.getInetAddress();
jta.append("Client " + clientNo + "'s host name is " + inetAdress.getHostName() + "\n");
jta.append("Client " + clientNo + "'s IP Address is " + inetAdress.getHostAddress() + "\n");
HandleAClient task = new HandleAClient(socket);
new Thread(task).start();
clientNo++;
}
} catch(IOException ex) {
System.err.println(ex);
}
客户端:
try {
Socket socket = new Socket("localhost", 8800);
fromServer = new DataInputStream(socket.getInputStream());
toServer = new DataOutputStream(socket.getOutputStream());
} catch (IOException ex) {
jta_TextArea.setText(ex.toString() + '\n');
}
答案 0 :(得分:2)
您的套接字绑定到localhost
这意味着只能为本地客户端提供服务。如果您希望其他人看到您的服务器,则第一步是绑定到其他人可见的IP地址!
答案 1 :(得分:1)
我认为您希望使用ServerSocket而不是常规套接字。
答案 2 :(得分:0)
“localhost”就是这样;它是您的本地主机或您的机器。如果您尝试将套接字连接到其他主机(例如,解析为www.worldofthedrakon.com),则需要获取该主机名或其IP地址。
Socket socket = new Socket("worldofthedrakon.com", 8800);
然后你就可以解决防火墙问题了。连接拒绝通常表示存在防火墙或两个防火墙。您知道新主机上的端口8800是否已打开?