gpt4 book ai didi

java - 使用 java 套接字的基于控制台的登录应用程序

转载 作者:行者123 更新时间:2023-12-01 05:10:24 25 4
gpt4 key购买 nike

我正在制作一个基于控制台的java应用程序 - 它将检查客户端的用户名和密码。我想要的是客户端输入的数据必须以逐行格式输入到服务器,即按 Enter 键必须发送用户名数据和密码,以便下次按 Enter 键。但问题是什么 - 直到我在客户端退出之前,数据都不会发送到服务器。意思是,当客户点击“再见”时。然后客户端关闭,服务器接收数据。在这方面帮助我,因为这是第一步 - 稍后我必须在服务器上使用此用户名和密码检查数据库。我的代码如下:

服务器:

import java.net.*;

import java.io.*;

public class EchoServer2 extends Thread
{
protected Socket clientSocket;

public static void main(String[] args) throws IOException
{
ServerSocket serverSocket = null;

try {
serverSocket = new ServerSocket(2010);
System.out.println ("Connection Socket Created");
try {
while (true)
{
System.out.println ("Waiting for Connection");
new EchoServer2 (serverSocket.accept());
}
}
catch (IOException e)
{
System.err.println("Accept failed.");
System.exit(1);
}
}
catch (IOException e)
{
System.err.println("Could not listen on port.");
System.exit(1);
}
finally
{
try {
serverSocket.close();
}
catch (IOException e)
{
System.err.println("Could not close port.");
System.exit(1);
}
}
}

private EchoServer2 (Socket clientSoc)
{
clientSocket = clientSoc;
start();
}

public void run()
{
System.out.println ("New Communication Thread Started");

try {
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(),
true);
PrintWriter out1 = new PrintWriter(clientSocket.getOutputStream(),
true);
BufferedReader in = new BufferedReader(
new InputStreamReader( clientSocket.getInputStream()));
BufferedReader in1 = new BufferedReader(
new InputStreamReader( clientSocket.getInputStream()));

String inputLine,u,p;

while ((u = in.readLine()) != null && (p = in.readLine()) != null)
{
System.out.println ("U: " + u);
out1.println(u);
System.out.println ("P: " + p);
out1.println(p);

if (u.equals("Bye."))
break;
}

out1.close();
out.close();
//in1.close();
in.close();
clientSocket.close();
}
catch (IOException e)
{
System.err.println("Problem with Communication Server");
System.exit(1);
}
}
}

客户:

import java.io.*;

import java.net.*;

import java.lang.*;

import java.io.Console;

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

String serverHostname = new String ("127.0.0.1");

if (args.length > 0)
serverHostname = args[0];
System.out.println ("Attemping to connect to host " +
serverHostname + " on port .");

Socket echoSocket = null;
PrintWriter out = null;
BufferedReader in = null;
BufferedReader in1 = null;

try {
echoSocket = new Socket(serverHostname, 2010);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host: " + serverHostname);
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for "
+ "the connection to: " + serverHostname);
System.exit(1);
}

BufferedReader stdIn = new BufferedReader(
new InputStreamReader(System.in));
BufferedReader std = new BufferedReader(
new InputStreamReader(System.in));
String upwd,uname,text;
Console console = System.console();
String username = console.readLine("Username:");
char[] pwd = console.readPassword("Password:");
upwd=new String(pwd);

while (username!=null && upwd!=null && (uname = stdIn.readLine()) != null)
{

out.println("Username:"+username);


out.println("Password:"+upwd);

// end loop
if (uname.equals("Bye."))
break;


}

out.close();

stdIn.close();
echoSocket.close();
}
}

最佳答案

在客户端,将密码写入流后执行out.flush()

关于java - 使用 java 套接字的基于控制台的登录应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12089768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com