客户端服务器与Java套接字的通信

时间:2016-09-02 16:06:32

标签: java sockets

我用java中的客户端和服务器套接字构建了一个程序,它从客户端获取一个数字,然后乘以2。 代码不允许我在客户端放一个数字。 代码:

客户端:

public class cli {

    public static void main(String args[]) throws UnknownHostException, IOException{
        Scanner in = new Scanner(System.in);
        int number,temp;
        Socket s = new Socket("127.0.0.1", 1342);
        Scanner c1 = new Scanner(s.getInputStream());
        System.out.println("Enter any number");
        number = in.nextInt();
        PrintStream p = new PrintStream(s.getOutputStream());
        p.println(number);
        temp = c1.nextInt();
        System.out.println(temp);
        in.close();
        s.close();
        c1.close();
    }
}

服务器

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

        ServerSocket s1 = new ServerSocket(1342);
        Socket ss = s1.accept();
        Scanner sc = new Scanner(ss.getInputStream());
        int number = sc.nextInt();

        int temp = number * 2;

        PrintStream p = new PrintStream(ss.getOutputStream());
        p.println(temp);
        ss.close();
        sc.close();
        s1.close();
    }
}

1 个答案:

答案 0 :(得分:1)

您应该使用DataInputStream来阅读intDataOutputStream来撰写它,在您的情况下比Scanner更合适。您还应该考虑使用try-with-resourses语句来正确关闭资源。

您的代码将更容易阅读和维护,这是避免错误的最佳方法。

服务器

public class ser {
    public static void main(String args[]) throws IOException {
        try (ServerSocket s1 = new ServerSocket(1342);
             Socket ss = s1.accept();
             DataInputStream sc = new DataInputStream(ss.getInputStream());
             DataOutputStream p = new DataOutputStream(ss.getOutputStream());
        ) {
            p.writeInt(sc.readInt() * 2);
        }
    }
}

<强>客户端:

public class cli {
    public static void main(String args[]) throws IOException {
        try (Scanner in = new Scanner(System.in);
            Socket s = new Socket("127.0.0.1", 1342);
            DataInputStream c1 = new DataInputStream(s.getInputStream());
            DataOutputStream p = new DataOutputStream(s.getOutputStream());
        ){
            System.out.println("Enter any number");
            int number = in.nextInt();

            p.writeInt(number);
            System.out.println(c1.readInt());
        }
    }
}

<强>输出:

Enter any number
12
24