今天学校TCP 客户端 并发登录的时候,代码编译成功,运行的时候,输入完 java LoginServer 和 java LoginClient 之后就 没有了,光标停在下一行,挂在那里,没有显示连接成功。
我随便在键盘输入,没有任何反应。之后用ctrl+c 结束会出来之前随意输入的文字。这是什么问题?
我的user.txt和代码放一个文件夹了。
附上我的代码。
/* 建立客户端与服务端的互相对话
客户端通过键盘录入用户名
服务端对这个用户名进行校验
如果该用户名存在,在服务端显示XX,已经登录
并在客户端显示,XXX 欢迎光临
如果该用户存在,在服务端显示,尝试登录
并在客户端显示XXX,该用户不存在
最多登录三次。
*/
import java.net.*;
import java.io.*;
class LoginClient
{
public static void main(String[] args) throws Exception
{
Socket s = new Socket("58.246.247.252",10009);
BufferedReader bufr = new BufferedReader (new InputStreamReader(System.in));
PrintWriter out =new PrintWriter(s.getOutputStream(),true);
BufferedReader bufIn = new BufferedReader(new InputStreamReader (s.getInputStream()));
for (int x =0;x<3 ;x++ )
{
String line = bufr.readLine();
if(line ==null)
break;
out.println(line);
String info = bufIn.readLine(); //String info= bufln.readLine();
System.out.println("info"+info);
if(info.contains("欢迎"))
break;
}
bufr.close();
s.close();
}
}
class UserThread implements Runnable
{
private Socket s ;
UserThread(Socket s)
{
this.s =s;
}
public void run()
{
String ip =s.getInetAddress().getHostAddress();
System.out.println(ip+".....connected");
try
{
for(int x =0;x<3;x++)
{
BufferedReader bufIn= new BufferedReader (new InputStreamReader(s.getInputStream()));
String name =bufIn.readLine();
if(name ==null)
break;
BufferedReader bufr =new BufferedReader (new FileReader("user.txt"));
PrintWriter out =new PrintWriter(s.getOutputStream(),true);
String line =null;
boolean flag =false ;
while((line=bufr.readLine())!=null)
{ if(line.equals(name))
{
flag =true ;
break;
}
}
if(flag)
{
System.out.println(name+",已登录");
out.println(name+",欢迎光临");
break;
}
else
{
System.out.println(name+",尝试登录");
out.println(name+",用户名不存在");
}
}
s.close();
}
catch (Exception e)
{
throw new RuntimeException(ip+"校验失败");
}
}
}
class LoginServer
{
public static void main(String [] args) throws Exception
{
ServerSocket ss =new ServerSocket (10009);
while(true)
{
Socket s =ss.accept();
new Thread (new UserThread(s)).start();
}
}
}
|
|