Java套接字构造函数,套接字(字符串主机名,int端口),挂起

Java套接字构造函数,套接字(字符串主机名,int端口),挂起,java,linux,sockets,ubuntu,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;

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


我们将非常感谢您的任何帮助!:)

套接字构造函数实际上没有连接,但它会尝试将主机名解析为IP地址。在本例中,名称解析似乎花费了很长时间,最终会超时,引发
UnknownHostException
。我听说在Windows上这可能需要几分钟


达戈巴是如何通过DNS或?尝试使用IP地址而不是名称。

尝试替换您的线路

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


这可能会解决你的疑问。看起来你的dagobah真的不是你所说的主机名。请右键单击“我的电脑”并转到“属性”,然后在“电脑名”下找到该名称,以重新检查。上面这一行将为您解决这个问题。

您的套接字构造函数有问题。检查您试图如何将
dagobah
解析为IP地址。使用
localhost
127.0.0.1
尝试您的代码


我试过了,效果非常好。

请注意,关闭finally块中的套接字,或者-如果您使用的是Java 7-使用try with resources。如果必须使用
System.exit(-1),在最后一个块后执行此操作,以确保套接字关闭。代码中的
dagobah
是什么?是服务器的名字吗?乔尼,谢谢你的帮助!是的,你是对的,它最终会超时的。“dagobah”是我电脑的主机名,所以。。。我不相信它使用DNS。我尝试使用InetAddress.getHostByName(null)输入环回地址,但这只会给出相同的结果。您可以使用
localhost
127.0.0.1
。本地主机名的名称解析取决于操作系统。在Unix上,您可以在
/etc/hosts
中配置它。当程序挂起时,您可以使用
jstack
进行完整的线程转储吗?这样我们就能看到它到底发生在哪里。调试器也可以用。嗯。。。它似乎还挂着。也,chris@dagobah:~/$hostnamedagobah@Chris:然后尝试提供一个新端口,可能该端口已忙。谢谢!我尝试了localhost和127.0.0.1。。。两人都不会联系。不过,很高兴知道它在另一台计算机上工作。我想我会换台不同的机器:/
s = new Socket("127.0.0.1", 6464);