黑马程序员技术交流社区
标题:
关于TCP客户端并发登陆的疑问
[打印本页]
作者:
高丽华
时间:
2014-1-14 13:24
标题:
关于TCP客户端并发登陆的疑问
<p>import java.net.*;
import java.io.*;
class SocketLogin
{
public static void main(String[] args) throws Exception
{
Socket s=new Socket("127.0.0.1",10009);
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
PrintWriter out=new PrintWriter(s.getOutputStream());
BufferedReader bufrin=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=bufrin.readLine();
System.out.println("info:"+info);
if(info.contains("欢迎"))
break;
}
bufr.close();
s.close();
}
}
class ServerSocketLogin
{
public static void main(String[] args)throws Exception
{
ServerSocket ss=new ServerSocket(10009);
while(true)
{
Socket s=ss.accept();
new Thread(new LoginThread(s)).start();
}
}
}
class LoginThread implements Runnable
{
private Socket s;
LoginThread(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 bufrin=new BufferedReader(new InputStreamReader(s.getInputStream()));
String name=bufrin.readLine();
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 (false)
{
System.out.println(name+",已登陆");
out.println(name+",欢迎光临");</p><p> }
else
{
System.out.println(name+",尝试登录");
out.println(name+",用户名不存在");
}
}
s.close();
}
catch (Exception e)
{
throw new RuntimeException(ip+"校验失败");
}
}
}</p><p>为什么运行不了,纠结呀!!</p>
复制代码
作者:
几番意难相付
时间:
2014-1-14 13:55
研究了一下你的代码,两个问题。
第一个 读取完客户端输入的信息后,并没有刷新流,导致服务端没有收到数据。
解决办法 在第22行后加上out.flush();
第二个 第75行 if(false)是什么意思?我猜你是想判断定义的flag标记是否为真吧?
解决办法 把if(false)改成 if(flag)
完整代码给你重发一下
import java.net.*;
import java.io.*;
class SocketLogin
{
public static void main(String[] args) throws Exception
{
Socket s=new Socket("127.0.0.1",10009);
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
PrintWriter out=new PrintWriter(s.getOutputStream());
BufferedReader bufrin=new BufferedReader(new InputStreamReader(s.getInputStream()));
for (int x=0;x<3;x++)
{
String line=bufr.readLine();
if(line==null)
break;
out.println(line);
out.flush();
String info=bufrin.readLine();
System.out.println("info:"+info);
if(info.contains("欢迎"))
break;
}
bufr.close();
s.close();
}
}
class ServerSocketLogin
{
public static void main(String[] args)throws Exception
{
ServerSocket ss=new ServerSocket(10009);
while(true)
{
Socket s=ss.accept();
new Thread(new LoginThread(s)).start();
}
}
}
class LoginThread implements Runnable
{
private Socket s;
LoginThread(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 bufrin=new BufferedReader(new InputStreamReader(s.getInputStream()));
String name=bufrin.readLine();
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)
{
System.out.println("line="+line);
if(line.equals(name))
{
flag=true;
break;
}
}
if (flag)
{
System.out.println(name+",已登陆");
out.println(name+",欢迎光临");
return;
}
else
{
System.out.println(name+",尝试登录");
out.println(name+",用户名不存在");
}
}
s.close();
}
catch (Exception e)
{
throw new RuntimeException(ip+"校验失败");
}
}
}
复制代码
作者:
范二青年
时间:
2014-1-14 13:58
能成功就怪了,你这写了个if(false)怎么可能进得去判断? 用if(flag)啊!!!!!
if (false)
{
System.out.println(name+",已登陆");
out.println(name+",欢迎光临"); }
else
{
System.out.println(name+",尝试登录");
out.println(name+",用户名不存在");
}
复制代码
作者:
汪伟楠
时间:
2014-1-14 16:31
class SocketLogin
{
public static void main(String[] args) throws Exception
{
Socket s=new Socket("127.0.0.1",10009);
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
PrintWriter out=new PrintWriter(s.getOutputStream());
BufferedReader bufrin=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=bufrin.readLine();
System.out.println("info:"+info);
if(info.contains("欢迎"))
break;
}
bufr.close();
s.close();
}
}
class ServerSocketLogin
{
public static void main(String[] args)throws Exception
{
ServerSocket ss=new ServerSocket(10009);
while(true)
{
Socket s=ss.accept();
new Thread(new LoginThread(s)).start();
}
}
}
class LoginThread implements Runnable
{
private Socket s;
LoginThread(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 bufrin=new BufferedReader(new InputStreamReader(s.getInputStream()));
String name=bufrin.readLine();
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 (false)
{
System.out.println(name+",已登陆");
out.println(name+",欢迎光临");
break;
}
else
{
System.out.println(name+",尝试登录");
out.println(name+",用户名不存在");
break;
}
}
s.close();
}
catch (Exception e)
{
throw new RuntimeException(ip+"校验失败");
}
}
}
是不是这两处少了break,我这个程序,你运行试试
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2