Java Socket构造函数,Socket(String hostName,int port),挂起

时间:2012-02-22 08:28:09

标签: java linux sockets ubuntu

我正在尝试制作一个简单的客户端/服务器程序。我打开了一个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

任何和所有帮助将不胜感激! :)

3 个答案:

答案 0 :(得分:4)

Socket构造函数实际上并未连接,但它确实尝试将主机名解析为IP地址。看起来在这种情况下,名称解析需要很长时间,最终会超时,抛出UnknownHostException。我听说在Windows上可能需要几分钟。

如何通过DNS解析dagobah?尝试使用IP地址而不是名称。

答案 1 :(得分:4)

您对Socket构造函数有疑问。检查您尝试将dagobah解析为IP地址的方式。尝试使用localhost127.0.0.1代码。

我试过,它的效果非常好。

答案 2 :(得分:2)

尝试替换你的行

s = new Socket("dagobah", 6464);

s = new Socket("127.0.0.1", 6464);

这可能会解决您的疑问。好像你的dagobah真的不是你所指示的HostName。通过右键单击“我的电脑”并转到“属性”,然后在“计算机名称”下找到该名称,请重新检查。上述内容将为您解决问题。