首页 文章

Java socket Client / Server连接拒绝问题[关闭]

提问于
浏览
-1

我尝试了一切,但似乎没有任何工作 . 我正在失去理智,如果有人能提供帮助那就太棒了 . 我正在写一个简单的客户端/服务器代码,其中我有echoclient.class给出了,我想在服务器上运行,我在localhost上写 . echoClient类发送消息,我想要反转字符串并将其发回 . 我继续拒绝使用echo客户端类连接,但是当我运行echo服务器时它工作正常 . 任何帮助???

这是我的代码:

import java.io.BufferedReader;
   import java.io.IOException;
   import java.io.InputStreamReader;
   import java.io.PrintWriter;
   import java.net.Socket;
   import java.net.ServerSocket;

   public class EchoServer {

      public static void main(String[] args) throws Exception {

        int port = Integer.parseInt(args[1]);
        String hostid = args[0];

           ServerSocket echoServer = new ServerSocket(port);
           System.out.println("Success");

        try{
           Socket echoClient = new Socket(hostid, port);
          echoClient = echoServer.accept();
           System.out.println("Connection made");

        // while(true){
          while ((echoServer.isClosed() != true) ||       
                   (echoClient.isClosed() != true)) {

           BufferedReader reader = new BufferedReader(new   
                          InputStreamReader(echoClient.getInputStream()));

           String message = reader.readLine();
           PrintWriter writer = new  
                           PrintWriter(echoClient.getOutputStream(), true);

           while(message.contains("#") != true || message.contains("$") 
                                                                 != true){
           String builder = new 
                              StringBuilder(message).reverse().toString();

         writer.println(builder + "\n");
           }//writer.close();

          System.out.println(message + "\n");

             writer.close();
              echoServer.close();
             echoClient.close();
           }

        }catch(IOException ex){
           ex.printStackTrace();
        }
     }
 }

这是结果:

java -cp . EchoClient 127.0.0.1 1234
Exception in thread "main" java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at java.net.Socket.<init>(Socket.java:434)
    at java.net.Socket.<init>(Socket.java:211)
    at EchoClient.main(EchoClient.java:22)

and when i run this: 
java -cp . EchoServer 127.0.0.1 1234
Success
Connection made

2 回答

  • 2
    • '拒绝连接'只是意味着没有任何东西正在侦听您尝试连接的IP:端口 . 可能是您在服务器之前启动了客户端 .

    • isClosed() 测试毫无意义 . 它们仅在关闭关联的套接字时返回true . 他们没有告诉你关于连接状态的任何信息 .

    Socket echoClient = new Socket(hostid, port);
    echoClient = echoServer.accept();
    

    是胡说八道 . 初始化你要在下一行中分配的变量充其量只是浪费时间,可能是无意义错误的来源 . 在这种情况下,您既有套接字泄漏又有自连接 . 这些不解释'连接被拒绝',但是自连接会阻止客户端在连接成功后工作,因为您没有为每个连接启动新线程 .

  • 0

    我认为您的代码存在一些问题 . 首先,看起来您的服务器和客户端属于同一个类 . 我认为它们应该是分开的;你应该有一个echoServer.java和一个echoClient.java . 接下来,假设您已完成此操作并仅显示echoServer,请在'try'之后的行中创建一个带有hostid和port的新echoClient . 你不需要这样做,下一行负责,它应该读取Socket echoClient = echoServer.accept();此外,我认为你的声明是错误的 .

    你应该看看http://introcs.cs.princeton.edu/java/84network/EchoServer.java.htmlhttp://introcs.cs.princeton.edu/java/84network/EchoClient.java.html

    ron shenk

相关问题