套接字:无法连接到服务器或特定端口

时间:2012-11-08 07:10:04

标签: java swing sockets connect echo-server

我正在尝试按端口和主机名连接服务器 我找到一个程序但是当我试图运行它时会显示以下异常

java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:208)
at sample.Echoclient2.main(Echoclient2.java:31)
Couldn't get I/O for the connection to: 127.0.0.1
Java Result: 1    

这是我使用的代码。

public class Echoclient2 {
public static void main(String[] args) throws IOException {

    String serverHostname = new String ("127.0.0.1");

    if (args.length > 0)
       serverHostname = args[0];
    System.out.println ("Attemping to connect to host " +
            serverHostname + " on port 10008.");



    Socket echoSocket = null;
    PrintWriter out = null;
    BufferedReader in = null;

    try {
        echoSocket = new Socket(serverHostname, 10008);
        System.out.println("server name"+Inet4Address.getByName(serverHostname));
        out = new PrintWriter(echoSocket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(
                                    echoSocket.getInputStream()));
         System.out.println("Connection accepted " +
            echoSocket.getInetAddress() + ":" +
            echoSocket.getPort());
    } catch (UnknownHostException e) {
        e.printStackTrace();
        System.err.println("Don't know about host: " + serverHostname);
        System.exit(1);
    } catch (IOException e) {
        e.printStackTrace();
        System.err.println("Couldn't get I/O for "
                           + "the connection to: " + serverHostname);
        System.exit(1);
    }

BufferedReader stdIn = new BufferedReader(
                               new InputStreamReader(System.in));
String userInput;

    System.out.println ("Type Message (\"Bye.\" to quit)");
while ((userInput = stdIn.readLine()) != null) 
       {
    out.println(userInput);

        // end loop
        if (userInput.equals("Bye."))
            break;

    System.out.println("echo: " + in.readLine());
   }

out.close();
in.close();
stdIn.close();
echoSocket.close();
}

}

我需要什么:
 1.我需要向服务器发送一些消息,并希望从服务器响应。假设我发送“我是stackoverflow的用户”,那么服务器应该给出任何响应,比如返回相同的String或以大写或其他方式转换。

有些问题:
 1.我编写客户端Java文件,但是我是否需要编写服务器java文件  2.我们可以使用ip和端口发送请求  3.我们可以使用主机名吗?  4.任何echo服务器名称?我需要向此服务器发送消息以便知道响应  我尝试了服务器,java和client.java然后我得到了结果?这是我的解决方案。

2 个答案:

答案 0 :(得分:3)

1. I write client Java File but whether i need to write server java file.

是的,您需要编写自己的服务器(如果服务器应满足某些独特要求)或连接到现有服务器。 “连接被拒绝”消息表示没有服务器正在您尝试连接的端口上运行。

2. Can we send request by using ip and port.

3. Can we use host name.

是。您需要IP或主机名以及端口。

4. Any echo server name? i need to send message to this server want to know response.

您可以在计算机上设置回显服务器,以便首先专注于对客户端进行编码。在端口7上定义了Standard Echo server。安装程序取决于您的操作系统环境 - 在Ubuntu Linux上,我必须安装xinetd软件包并在/etc/xinetd.d/echo中启用echo服务器。然后,您可以使用telnet程序验证服务器是否正在运行:

andreas@ubuntu:~$ telnet localhost 7
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello
Hello

使用telnet连接到任何端口也是验证服务器是否正在运行且可访问的常用技术。根据您的问题中的示例,您可以使用telnet 127.0.0.1 10008检查服务器是否在您指定的端口上运行 - 如果没有可用的服务器,您将获得与Java程序相同的connetion refused

5. I try both server,java and client.java then i got result? is this solution for me.

不确定您指的是哪个服务器和客户端。


其他一些参考资料:

答案 1 :(得分:1)

您还必须在本地主机中运行您的服务器程序。您收到此异常是因为您的计算机上的10008端口没有损坏。

一些问题:

  1. 我编写了客户端Java文件但我是否需要编写服务器java文件。

    您可以编写服务器程序,也可以连接到远程服务器。在那里面 你应该在远程服务器上同时拥有ip和运行端口。

  2. 我们可以使用ip和port发送请求吗。

    是您需要同时发送消息。

  3. 我们可以使用主机名。

    如果您的计算机可以解析主机名,则可以执行此操作。其他您可以使用IP地址

  4. 任何echo服务器名称?我需要向此服务器发送消息以了解响应。

    我不知道这个,需要在网上搜索。

  5. 我尝试了服务器,java和client.java然后我得到了结果?这是我的解决方案。