黑马程序员技术交流社区
标题:
关于并发访问的一个问题
[打印本页]
作者:
徐帅
时间:
2012-10-16 16:04
标题:
关于并发访问的一个问题
我先启动了服务端,然后服务端刚启动,还未等键盘录入,就执行完毕,抛出
throw new RuntimeException(ip+"检验失败");
readLine( ) 应该是阻塞,服务端要等到客户端键盘录入数据并传入到服务端,才能继续向下执行,为什么这里直接结束了呢?找了半天,不知道哪里
出了问题,请大侠帮忙看看,谢谢了
package cn.it.xushuai.netProgram;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
class LoginClient{
public static void main(String[] args) throws UnknownHostException, IOException{
System.out.println("Client...........run");
Socket s = new Socket("127.0.0.1",10012);
//需要明确3个流:键盘录入,读取服务端,写入服务端
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(s.getOutputStream(),true); //向服务端传送数据
BufferedReader bufrIn = new BufferedReader(new InputStreamReader(s.getInputStream()));//获取服务端反馈的信息
for(int i=0;i<3;i++){ //向服务端提交数据,最多3次机会
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 UserThread implements Runnable{
private Socket s ;
UserThread(Socket s ){
this.s = s ;
}
@Override
public void run() {
// TODO Auto-generated method stub
//明确3个流:接收客户端、输出、 以及读取数据库
String ip = s.getInetAddress().getHostAddress();
System.out.println("userThread........run");
System.out.println(ip+"........connected");
try {
for(int i=0;i<3;i++){
BufferedReader bufrIn =
new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
String userName = bufrIn.readLine(); //读取客户端发送的数据
String line = null;
boolean flag = false;
while((line = bufr.readLine())!=null){
if(line.equals(userName)){
flag = true;
break;
}
}
if(flag){
System.out.println(userName+",已登陆");
out.println(userName+"登陆成功,欢迎您!"); //向客户端反馈数据
break;
}
else{
System.out.println(userName+",尝试登陆");
out.println(userName+",用户名不存在");
}
}
s.close();
} catch (IOException e) {
throw new RuntimeException(ip+"检验失败");
}
}}
class LoginServer
{
public static void main(String[] args) throws Exception
{
System.out.println("server run..........");
ServerSocket ss = new ServerSocket(10012);
while(true)
{
Socket s = ss.accept();
new Thread(new UserThread(s)).start();
}
}
}
复制代码
user.txt :
zhangsan
lisi
wangwu
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2