Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
安全连接Java套接字_Java_Sockets - Fatal编程技术网

安全连接Java套接字

安全连接Java套接字,java,sockets,Java,Sockets,我有一个关于我用java创建的桌面应用程序的问题,它在登录部分。事实证明,我不知道如何进行安全登录,我是通过套接字进行的,但问题是,这是一个公开的应用程序,所以我不知道如何使用SSL套接字而不为每个人使用密码,这是可以破解的,你能帮我吗?我目前有这段代码,可以在消息中的一个简单示例中看到它 对于服务器 //static ServerSocket variable private static ServerSocket server; //socket server port on

我有一个关于我用java创建的桌面应用程序的问题,它在登录部分。事实证明,我不知道如何进行安全登录,我是通过套接字进行的,但问题是,这是一个公开的应用程序,所以我不知道如何使用SSL套接字而不为每个人使用密码,这是可以破解的,你能帮我吗?我目前有这段代码,可以在消息中的一个简单示例中看到它

对于服务器

//static ServerSocket variable
    private static ServerSocket server;
    //socket server port on which it will listen
    private static int port = 9876;

    public static void main(String args[]) throws IOException, ClassNotFoundException{
        //create the socket server object
        server = new ServerSocket(port);
        //keep listens indefinitely until receives 'exit' call or program terminates
        while(true){
            System.out.println("Waiting for the client request");
            //creating socket and waiting for client connection
            Socket socket = server.accept();
            //read from socket to ObjectInputStream object
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            //convert ObjectInputStream object to String
            String message = (String) ois.readObject();
            System.out.println("Message Received: " + message);
            //create ObjectOutputStream object
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            //write object to Socket
            oos.writeObject("Hi Client "+message);
            //close resources
            ois.close();
            oos.close();
            socket.close();
            //terminate the server if client sends exit request
            if(message.equalsIgnoreCase("exit")) break;
        }
        System.out.println("Shutting down Socket server!!");
        //close the ServerSocket object
        server.close();
    }

}

为客户


public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException, InterruptedException{
        //get the localhost IP address, if server is running on some other IP, you need to use that
        InetAddress host = InetAddress.getLocalHost();
        Socket socket = null;
        ObjectOutputStream oos = null;
        ObjectInputStream ois = null;
        for(int i=0; i<5;i++){
            //establish socket connection to server
            socket = new Socket(host.getHostName(), 9876);
            //write to socket using ObjectOutputStream
            oos = new ObjectOutputStream(socket.getOutputStream());
            System.out.println("Sending request to Socket Server");
            if(i==4)oos.writeObject("exit");
            else oos.writeObject(""+i);
            //read the server response message
            ois = new ObjectInputStream(socket.getInputStream());
            String message = (String) ois.readObject();
            System.out.println("Message: " + message);
            //close resources
            ois.close();
            oos.close();
            Thread.sleep(100);
        }
    }
}

公共静态void main(字符串[]args)抛出UnknownHostException、IOException、ClassNotFoundException、InterruptedException{
//获取本地主机IP地址,如果服务器在其他IP上运行,则需要使用该地址
InetAddress主机=InetAddress.getLocalHost();
套接字=空;
ObjectOutputStream oos=null;
ObjectInputStream ois=null;

对于(inti=0;i如果你想以这种方式处理500个客户机-忘记套接字和手动实现TLS处理。最后,选择Spring Boot或类似的方法


像上面那样编写临时代码可以让您快速进入web通信,但会使下一步更加困难。

看起来您希望在这里实现两件事。第一件事是确保渠道的完整性和机密性。第二件事是验证客户端。编写您自己的TLS su通过套接字进行支持将很困难,而且容易出错。编写您自己的对称加密并将机密存储在bots服务器和客户端本地可能更容易。这也将向服务器验证客户端。但问题是-将有多少个客户端?一个?客户端的代码是否公开?另一个想法是要使用已经支持TLS的服务器和标准,例如编写自己的REST端点并将其部署到Tomcat上。使用TLS保护所有内容。使您的客户端通过TLS连接。标准功能。该应用程序将有大约500个客户端。但是,如何使用相同的simetric密码处理客户端和服务器,如何将密码发送给客户端t、 该应用程序将使用Java,因此任何人都可以反编译代码为什么我不能使用套接字?而且它不是web,而是Java桌面应用程序。相信我,你不想使用套接字实现TLS。桌面应用程序也可以使用各种web协议,如REST、HTTP等。使用USB编写桌面应用程序是一种常见的做法你能给我举个例子吗?虽然我欣赏并同意你对使用更高级协议和工具的关注,但我觉得你夸大了在Java中使用TLS的难度。Java支持服务器和客户端的TLS套接字。API与套接字API非常相似。