我正在尝试制作一个简单的客户端/服务器程序。我打开了一个ServerSocket,但似乎无法使用我创建的客户端套接字连接到它。
我一直在寻找一段时间的答案 - 坦率地说,我不确定甚至可以用这个问题搜索什么。
这是客户端代码:
import java.io.*;
import java.net.*;
public class Client{
public static void main(String[] args) throws IOException {
Socket s = null;
try{
System.out.println("connecting to host...");
s = new Socket("dagobah", 6464);
}catch (UnknownHostException e) {
System.err.println("Can't connect");
System.exit(1);
}
System.out.println("Connected to host");
s.close();
}
}
这是服务器代码:
import java.net.*;
import java.io.*;
import java.util.*;
public class server{
public static void main(String[] args) throws IOException{
ServerSocket serverSocket = null;
try{
serverSocket = new ServerSocket(6464);
}catch (IOException e){
System.err.println("fail to start server");
System.exit(1);
}
System.out.println("Server started : )");
Socket clientSocket = null;
try{
System.out.println("waiting for a client...");
clientSocket = serverSocket.accept();
} catch (IOException e) {
System.out.println("fail can't accept client connection");
System.exit(-1);
}
System.out.println("client connected");
clientSocket.close();
serverSocket.close();
}
}
客户端永远不会通过try块
客户端输出:连接到主机...
服务器输出:服务器已启动:) 等待客户...
自发布此问题以来,我了解到这是我的计算机特有的问题。我正在运行Linux 2.6.38-11-generic x86_64 GNU / Linux Ubuntu Natty
任何和所有帮助将不胜感激! :)
答案 0 :(得分:4)
Socket
构造函数实际上并未连接,但它确实尝试将主机名解析为IP地址。看起来在这种情况下,名称解析需要很长时间,最终会超时,抛出UnknownHostException
。我听说在Windows上可能需要几分钟。
如何通过DNS解析dagobah
?尝试使用IP地址而不是名称。
答案 1 :(得分:4)
您对Socket构造函数有疑问。检查您尝试将dagobah
解析为IP地址的方式。尝试使用localhost
或127.0.0.1
代码。
我试过,它的效果非常好。
答案 2 :(得分:2)
尝试替换你的行
s = new Socket("dagobah", 6464);
带
s = new Socket("127.0.0.1", 6464);
这可能会解决您的疑问。好像你的dagobah真的不是你所指示的HostName。通过右键单击“我的电脑”并转到“属性”,然后在“计算机名称”下找到该名称,请重新检查。上述内容将为您解决问题。