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 服务器工作原理的最佳场所 :) 享受
这周我开始使用 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 服务器工作原理的最佳场所 :) 享受