Java 使用套接字登录

Java login with sockets

这周我开始使用 java 套接字,第一个想法是创建一个登录表单,然后是一些将从数据库接收数据的表单。

登录正常,但由于服务器关闭,它只检查了一次。 我想我需要创建一个 while 语句以便服务器始终在监听,但实际上我不知道放在哪里以及如何放它。

到目前为止,这是我的代码: 服务器:

package pkgnew.sockets;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    ServerSocket serversocket;
    Socket client;

    BufferedReader input;
    PrintWriter output;

    public void start() throws IOException{
        serversocket = new ServerSocket(9090);
        System.out.println("Connection Starting on port:" + serversocket.getLocalPort() );
        //make connection to client on port specified


        //accept connection from client
        client = serversocket.accept();

        System.out.println("Waiting for connection from client");

        try {
            logInfo();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void logInfo() throws Exception{
        //open buffered reader for reading data from client

        input = new BufferedReader(new InputStreamReader(client.getInputStream()));

        String username = input.readLine();
        System.out.println("username" + username);
        String password = input.readLine();
        System.out.println("password" + password);

        //open printwriter for writing data to client
        output = new PrintWriter(new OutputStreamWriter(client.getOutputStream()));


        if(username.equals("User") &&password.equals("Password")){
            output.println("Welcome, " + username);
        }else{
            output.println("Login Failed");
        }
        output.flush();
        output.close();

    }
    public static void main(String[] args){
        Server server = new Server();
        try {
            server.start();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }       

}

客户:

package pkgnew.sockets;

import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JOptionPane;


public class Client {


    Socket socket;
    BufferedReader read;
    PrintWriter output;

    public void startClient() throws UnknownHostException, IOException{
        //Create socket connection
        socket = new Socket("localhos", 9090);

        //create printwriter for sending login to server
        output = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));

        //prompt for user name
        String username = JOptionPane.showInputDialog(null, "Enter User Name:");

        //send user name to server
        output.println(username);

        //prompt for password
        String password = JOptionPane.showInputDialog(null, "Enter Password");

        //send password to server
        output.println(password);
        output.flush();

        //create Buffered reader for reading response from server
        read = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        //read response from server
        String response = read.readLine();
        System.out.println("This is the response: " + response);

        //display response
        JOptionPane.showMessageDialog(null, response);
    }



    public static void main(String args[]){
        Client client = new Client();
        try {
            client.startClient();
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

提前给你们加油

use something like this,

while(true){
    Socket clientSocket = serverSocket.accept();
        new Thread(new Runnable() {
            @Override
            public void run() {
              login();
            }
        });
}

// 某个地方,类似于你的服务器的 shutdownhook serverSocket.close();

好吧这段代码只是为了你的理解目的,实际上在实时服务器中将使用线程池来管理服务器处理的请求数量,最大请求可以排队,最大连接数可以打开 ssl/tls 安全等等诸多因素....

像往常一样,您可以通过 http://tomcat.apache.org/tomcat-9.0-doc/ 了解 https 服务器工作原理的最佳场所 :) 享受