不工作的Socket java软件

时间:2014-05-19 22:35:05

标签: java sockets client-server

我创建了一个简单的服务器/客户端应用程序,但我无法使用这个带有两个参数的应用程序,所以我想在服务器上添加两个数字,两个数字作为参数发送到服务器。 但是当我向服务器发送两个参数时,客户端和服务器开始等待任何事情并且什么也没发生,就像运行它们一样没有结果。

服务器

class Server3 public static void main(String[] args)
{  
    try 
      (
          ServerSocket server=new ServerSocket(12345);
          Socket client=server.accept();
          PrintWriter output=new PrintWriter(client.getOutputStream(),true);
          BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
     )
      {
          int result=0;
          String input;
          while((input=in.readLine())!=null)
          {
              System.out.println(input);
              result+=Integer.parseInt(input)*3;

              //output.println("The result to client is "+result);
              //output.flush();
          }
          output.println("The result to client is "+result);
          output.flush();
      }

}

}

客户

import java.net.*;
import java.io.*;
import java.util.*;


class Client3
{
    public static void main(String[] args) throws Exception
    try
      (
          Socket toServer=new Socket("localhost",12345);
          PrintWriter output=new PrintWriter(toServer.getOutputStream(),true);
          BufferedReader in=new BufferedReader(new InputStreamReader(toServer.getInputStream()));
      )
      {
          String temp,input;
          for(int i=0;i<args.length;++i)
          {
              output.println(args[i]);
              output.flush();
          }
          while((input=in.readLine())!=null);
          {
               input=in.readLine();

          }
          System.out.println(input);
      }

}

}

你有什么想法吗? 我尝试了很多东西? 但我永远不能使用更多数字,我只能在没有条件的情况下使用。

1 个答案:

答案 0 :(得分:1)

您必须使用协议在客户端和服务器之间进行通信。它就像一种谈论的方式,或者你可以说一些在谈话时要遵循的规则。


示例代码:(读取内联注释)

  

在这里,我使用DONE作为令牌告诉服务器客户端已经发送了所有号码,现在我正在等待结果。

服务器:

收到所有号码后中断循环并将结果发送回客户端。

public class Server {
    public static void main(String[] args) throws IOException {
        try (ServerSocket server = new ServerSocket(12345);
            Socket client = server.accept();
            // flush automatically 
            PrintWriter output = new PrintWriter(client.getOutputStream(),true);
            BufferedReader in = new BufferedReader(new InputStreamReader(
                        client.getInputStream()));) {
            int result = 0;
            String input;
            while ((input = in.readLine()) != null) {
                System.out.println(input);
                if (input.equals("DONE")) { // Server received token DONE
                    break;                  // break the loop
                }
                result += Integer.parseInt(input) * 3;
            }
            // sent the result back to client
            output.println("The result to client is " + result);
            // output.flush();
            // no need to call flush here 
            // because you have already set it to flush automatically 
        }
    }
}

客户:

您不需要while((input=in.readLine())!=null);等待收到的结果。

public class Client {
    public static void main(String[] a) throws Exception {
        try (Socket toServer = new Socket("localhost", 12345);
           // flush automatically 
           PrintWriter output = new PrintWriter(toServer.getOutputStream(),true);
           BufferedReader in = new BufferedReader(new InputStreamReader(
                        toServer.getInputStream()));) {                

            for (int i = 0; i < args.length; ++i) {
                output.println(args[i]); // sent all the numbers
                // output.flush();  
                // no need to call flush here 
                // because you have already set it to flush automatically 
            }
            output.println("DONE");  // Client sent token DONE
            String  input = in.readLine();   // read the result
            System.out.println(input);
        }

    }
}

输出:(服务器)

1
2
DONE

输出:(客户端)

The result to client is 9