Java套接字构造函数,套接字(字符串主机名,int端口),挂起
我正在尝试制作一个简单的客户机/服务器程序。我打开了一个ServerSocket,但似乎无法使用我创建的客户端套接字连接到它 我一直在寻找一个答案已经有一段时间了——坦白地说,我甚至不确定这个问题要寻找什么 以下是客户端代码: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;
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);