在JavaEclipse中使用客户机-服务器多线程编程添加两个数字

在JavaEclipse中使用客户机-服务器多线程编程添加两个数字,java,eclipse,multithreading,sockets,Java,Eclipse,Multithreading,Sockets,下面的客户机-服务器程序没有给我任何输出。我想加两个数字。我是新的Java编程。输入第二个数字后,下面有空白。我在下面做什么。请帮我解决这个问题。谢谢 Java package Client.java; import java.net.*; import java.io.*; import java.util.Scanner; public class GreetingClient { public static void main(Stri

下面的客户机-服务器程序没有给我任何输出。我想加两个数字。我是新的Java编程。输入第二个数字后,下面有空白。我在下面做什么。请帮我解决这个问题。谢谢

Java

        package Client.java;

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

 public class GreetingClient
{
   public static void main(String [] args)
 {
  Scanner userInput = new Scanner(System.in);

  System.out.println("Enter Server Address: ");
  String serverName;
  serverName = userInput.next(); 

  System.out.println("Enter Port Number: ");
  String port;
  port = userInput.next(); 


  try
  {
     System.out.println("Connecting to " + serverName
                         + " on port " + port);
     Socket client = new Socket(serverName, Integer.parseInt(port));
     System.out.println("Just connected to "
                  + client.getRemoteSocketAddress());
     OutputStream outToServer = client.getOutputStream();
     DataOutputStream out =
                   new DataOutputStream(outToServer);

     System.out.println("Enter a first number: ");

      //userInput.nextInt();
      Integer x= userInput.nextInt();
      System.out.println("Enter a second number: ");
    //  userInput.nextInt();
      Integer y= userInput.nextInt();


    //  System.out.println("hello");


      out.writeInt(x);
      out.writeInt(y);

     InputStream inFromServer = client.getInputStream();
     DataInputStream in =
                    new DataInputStream(inFromServer);
     System.out.println("Server responds: " +in.readInt());
     client.close();
  }catch(IOException e)
  {
     e.printStackTrace();
  }
} }

Java

   `        package Client.java;

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

   public class GreetingServer extends Thread
  {
   private ServerSocket serverSocket;

    public GreetingServer(int port) throws IOException
   {
    serverSocket = new ServerSocket(port);
     serverSocket.setSoTimeout(100000);
    }

    public void run()
    {
    while(true)
      {
     try
     {
        System.out.println("Waiting for client on port " +
        serverSocket.getLocalPort() + "...");
        Socket server = serverSocket.accept();
        System.out.println("Just connected to "
              + server.getRemoteSocketAddress());
        DataInputStream in =
              new DataInputStream(server.getInputStream());





   Integer x=in.readInt();
   System.out.println("Hellox");
   Integer y=in.readInt();
    System.out.println("Helloy");

       // System.out.println(x);
        //System.out.println(y);


        Integer sum = ( x + y );
        DataOutputStream out =
             new DataOutputStream(server.getOutputStream());

    //  System.out.println(sum);
        out.write(sum);




        server.close();
     }catch(SocketTimeoutException s)
     {
        System.out.println("Socket timed out!");
        break;
     }catch(IOException e)
     {
        e.printStackTrace();
        break;
     }
    }
   }
     public static void main(String [] args)
       {

  Scanner userInput = new Scanner(System.in);
  System.out.println("Please specify a port number (1~65535): ");
  String port;
  port = userInput.next(); 

  try
  {
     Thread t = new GreetingServer(Integer.parseInt(port));
     t.start();
  }catch(IOException e)
  {
     e.printStackTrace();
     }
    }
      }`

在服务器程序中,替换

out.write(sum);


如果您注意到,您在客户端程序中正确地使用了out.writeInt。

我的解决方案,来自巴西:

public class SocketSomaClient {
     /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        int porta = 5050;
        String ip = "localhost";
        Scanner userInput = new Scanner(System.in);


        try{
            Socket socket = new Socket(ip, porta);

            DataOutputStream output = new DataOutputStream(socket.getOutputStream());

            System.out.println("Entre com o primeiro número: ");
            int x= userInput.nextInt();

            System.out.println("Entre com o segundo número: ");
            int y= userInput.nextInt();

            output.writeInt(x);
            output.writeInt(y);

            DataInputStream  input = new DataInputStream(socket.getInputStream());

            int soma = input.readInt();
            System.out.println("A soma dos dois números é: "+ soma);

        }catch(IOException ex){
            System.err.println(ex.getMessage());
        }
    }
}

public class SocketSomaServer {
    public static void main(String[] args) {

        try{

                ServerSocket serverSocket = new ServerSocket(5050);

                while(true){
                    // aguarda conexões
                    Socket socket = serverSocket.accept();
                    try{
                    // recupera os dados
                    DataInputStream  input = 
                            new DataInputStream(socket.getInputStream());

                    Integer x = input.readInt();
                    Integer y = input.readInt();

                    Integer sum = ( x + y );
                    DataOutputStream out =
                         new DataOutputStream(socket.getOutputStream());
                    out.writeInt(sum);

                 }catch(SocketTimeoutException s)
                 {
                    System.out.println("Socket timed out!");
                    break;
                 }catch(IOException e)
                 {
                    e.printStackTrace();
                    break;
                 }
                }

        }catch(Exception ex){
            System.err.println(ex.getMessage());
        }

    }
}

它取决于服务器向输出流写入的内容。在编写时不提供数据类型。您需要以类似的方式检索

 Integer sum = ( x + y );
    DataOutputStream out =
         new DataOutputStream(server.getOutputStream());

//  System.out.println(sum);
    out.write(sum);
在客户端读取时,只需使用如下读取

InputStream inFromServer = client.getInputStream();
         DataInputStream in =
                        new DataInputStream(inFromServer);
         System.out.println("Server responds: " +in.read());
不要如上所示指定int类型

请在下面找到完整的代码

客户端代码

服务器代码


如何在控制台中输入这两个数字,1 2或1你按enter然后再按2再回车?1然后按enter,它将要求输入第二个数字,然后我将输入2在这种情况下,你必须在读取下一个int之前使用新行,你必须调用userInput.nextLine。我在整数x=…之前添加了userInput.nextLine。。。和整数y=。。。。。线仍然是相同的问题。您还应该将其添加到整数x=。。。和整数y=。。。。此外,您应该使用int而不是Integer
InputStream inFromServer = client.getInputStream();
         DataInputStream in =
                        new DataInputStream(inFromServer);
         System.out.println("Server responds: " +in.read());
    package Client.java;

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

public class GreetingClient {
    public static void main(String[] args) {
        Scanner userInput = new Scanner(System.in);

        System.out.println("Enter Server Address: ");
        String serverName;
        serverName = userInput.next();

        System.out.println("Enter Port Number: ");
        String port;
        port = userInput.next();

        try {
            System.out.println("Connecting to " + serverName + " on port " + port);
            Socket client = new Socket(serverName, Integer.parseInt(port));
            System.out.println("Just connected to " + client.getRemoteSocketAddress());
            OutputStream outToServer = client.getOutputStream();
            DataOutputStream out = new DataOutputStream(outToServer);

            System.out.println("Enter a first number: ");

//userInput.nextInt();
            Integer x = userInput.nextInt();
            System.out.println("Enter a second number: ");
//  userInput.nextInt();
            Integer y = userInput.nextInt();

//  System.out.println("hello");

            out.writeInt(x);
            out.writeInt(y);

            DataOutputStream os = new DataOutputStream(client.getOutputStream());
            BufferedReader is = new BufferedReader(new InputStreamReader(client.getInputStream()));

            InputStream inFromServer = client.getInputStream();
            DataInputStream in = new DataInputStream(inFromServer);
            System.out.println("Server responds: " + in.read());
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
package Client.java;

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

public class GreetingServer extends Thread {
    private ServerSocket serverSocket;

    public GreetingServer(int port) throws IOException {
        serverSocket = new ServerSocket(port);
        serverSocket.setSoTimeout(100000);
    }

    public void run() {
        while (true) {
            try {
                System.out.println("Waiting for client on port " + serverSocket.getLocalPort() + "...");
                Socket server = serverSocket.accept();
                System.out.println("Just connected to " + server.getRemoteSocketAddress());
                DataInputStream in = new DataInputStream(server.getInputStream());

                Integer x = in.readInt();
                System.out.println("Hellox");
                Integer y = in.readInt();
                System.out.println("Helloy");

                // System.out.println(x);
                // System.out.println(y);

                Integer sum = (x + y);
                DataOutputStream out = new DataOutputStream(server.getOutputStream());

                // System.out.println(sum);
                out.write(sum);

                server.close();
            } catch (SocketTimeoutException s) {
                System.out.println("Socket timed out!");
                break;
            } catch (IOException e) {
                e.printStackTrace();
                break;
            }
        }
    }

    public static void main(String[] args) {

        Scanner userInput = new Scanner(System.in);
        System.out.println("Please specify a port number (1~65535): ");
        String port;
        port = userInput.next();

        try {
            Thread t = new GreetingServer(Integer.parseInt(port));
            t.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}