/*
用戶端通過鍵盤錄入使用者名。
服務端對使用者名進行驗證。
如果使用者名存在,服務端顯示xxx已登入,用戶端顯示xxx,歡迎登陸。
如果使用者名不存在,服務端顯示xxx嘗試登陸,用戶端顯示xxx,使用者名不存在。
最多登陸三次,防止暴力登陸。
*/
import java.io.*;
import java.net.*;
*用戶端
class client
{
public static void main(string[] args) throws exception
{
socket s = new socket("192.168.33.1",10008);//建立服務
bufferedreader bufr = new bufferedreader(new inputstreamreader(system.in));//讀取鍵盤輸入使用者名
printwriter pw = new printwriter(s.getoutputstream(),true);//讀到資料往服務端寫
bufferedreader bufin =
new bufferedreader(new inputstreamreader(s.getinputstream()));//将用戶端傳回的資料讀入
for(int x = 0;x < 3; x ++)//隻登陸3次設定
{
string line = bufr.readline();//讀取使用者名
pw.println(line);
if(line == null)//為空使用者名終止
break;
string info = bufin.readline();//讀取服務端傳回的資料
system.out.println("server info:"+info);
if(info.contains("歡迎登陸"))//使用者登入終止
}
bufr.close();
s.close();
}
}
*服務端
class serverthread implements runnable
private socket s;
serverthread(socket s)
this.s = s;
public void run()
string ip = s.getinetaddress().gethostaddress();
system.out.println(ip+"...........connect");
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)//讀取資料庫(use.txt)中資料
{
if(line.equals(name))//如果資料庫和讀取使用者名相同,則終止
{
flag = true;
break;
}
}
if(flag)
system.out.println(name+":已登入");
out.println(name+":歡迎登陸");
else
system.out.println(name+":嘗試登陸");
out.println(name+":使用者名不存在");
}
s.close();
catch (exception e)
throw new runtimeexception("驗證失敗");
class server
serversocket ss = new serversocket(10008);//建立服務
while (true)
socket s = ss.accept();//接收用戶端傳來資料
new thread(new serverthread(s)).start();//開啟線程
列印結果:
user.txt
轉載:http://blog.csdn.net/chaoyu168/article/details/49906145