亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? server.java

?? java 聊天工具 包括服務器 和 客戶端 類似
?? JAVA
字號:
import java.io.* ;
import java.net.*;
import java.util.*;

class UserInfo{
	public String name;
	public String password;
	public String sex;
	public String age;
	public String city;
	public String email;
	
	public UserInfo(){
		
	}
	
	public UserInfo(String name,String password,String sex,String age,String city,String email){
		this.name = name;
		this.password = password;
		this.sex = sex;
		this.age = age;
		this.city = city;
		this.email = email;
	}
	
	public String toString(){
		return name+'\n'+password+'\n'+sex+'\n'+age+'\n'+city+'\n'+email;
	}
	
	public static UserInfo getUserInfo(String userInfoString){
		UserInfo userInfo = new UserInfo();
		String[] data = userInfoString.split("\n");
		userInfo.name = data[0];
		userInfo.password = data[1];
		userInfo.sex = data[2];
		userInfo.age = data[3];
		userInfo.city = data[4];
		userInfo.email = data[5];
		return userInfo;
	}
	
	 public static UserInfo[] getUserInfoList()throws IOException{
		File file = new File("data.txt");
		BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
		int a = in.read()-'0';
		UserInfo[]userInfoList = new UserInfo[a];
		in.readLine();
		for(int i=0;i<userInfoList.length;i++){
			userInfoList[i] = new UserInfo();
			userInfoList[i].name = in.readLine();
			userInfoList[i].password = in.readLine();
			userInfoList[i].sex = in.readLine();
			userInfoList[i].age = in.readLine();
			userInfoList[i].city = in.readLine();
			userInfoList[i].email = in.readLine();
		}
		in.close();
		return userInfoList;
	}
	
	public static void writeUserInfoList(UserInfo[] userInfoList)throws IOException{
		File file = new File("data.txt");
		FileWriter out = new FileWriter(file);
		out.write(userInfoList.length+'0');
		out.write('\n');
		for(int i=0;i<userInfoList.length;i++){
			out.write(userInfoList[i].name);
			out.write('\n');
			out.write(userInfoList[i].password);
			out.write('\n');
			out.write(userInfoList[i].sex);
			out.write('\n');
			out.write(userInfoList[i].age);
			out.write('\n');
			out.write(userInfoList[i].city);
			out.write('\n');
			out.write(userInfoList[i].email);
			out.write('\n');
		}
		out.close();
	}
	
	public static UserInfo[] addUserInfo(UserInfo[] userInfoList,UserInfo userInfo){
		UserInfo[] newList = new UserInfo[userInfoList.length+1];
		for(int i=0;i<userInfoList.length;i++){
			newList[i] = new UserInfo(userInfoList[i].name,userInfoList[i].password,userInfoList[i].sex,userInfoList[i].age,userInfoList[i].city,userInfoList[i].email);
		}
		newList[userInfoList.length] = new UserInfo(userInfo.name,userInfo.password,userInfo.sex,userInfo.age,userInfo.city,userInfo.email);
	    return newList;
	}
}

class StringOperate{
		static public String arrayToString(String[] a){
		int len=0,index=0;
		char[] b;
	    for(int i=0;i<a.length;i++){
	    	len+=a[i].length();
	    }
	    
	    b = new char[len+a.length];
	    
	    for(int j=0;j<a.length;j++){
	    	for(int k=0;k<a[j].length();k++){
	    	   b[index] = a[j].charAt(k);
	    	   index++;
	    	}
	    	b[index] = '\n';
	    	index++;
	    }
	    
	    String c = new String(b);
	    return c;
	}
	
	static public String[] stringToArray(String a){
		String[]b;
		int num=0;
		for(int i=0;i<a.length();i++){
			if (a.charAt(i) == '\n') num++;
		}
		b = new String[num];
		
		int fromindex=0;
		for(int j=0;j<num;j++){
			b[j] = a.substring(fromindex,a.indexOf('\n',fromindex));
			fromindex = a.indexOf('\n',fromindex)+1;
		}	
		return b;
	}
	
	static public String[] arrayRemoveString(String[] a,String b){
		String[] c = new String[a.length-1];
		int index=0;
	    for(int i=0;i<a.length;i++){
	    	if(a[i].equals(b)) continue;
	    	c[index] = a[i];
	    	index++;
	    }
	    return c;
	}
}

class UserData{
	
	String[] users = null;
	int num;
	
	public UserData(int num){
		users = new String[num+1];
		this.num = num;
	}
	
	public int getIndex(String str){
		for(int i=1;i<=num;i++){
		if(users[i]==null) continue;
		if(users[i].equals(str))
		return i;
		}
		return -1;
	}
	
	public int insertUser(String str,int location){
        if(users[location]==null){
        	users[location] = str;
        	return 1;
        }
        return -1;
	}
	
	public void removeUser(String str){
		int index = this.getIndex(str);
		users[index] = null;
	}
	
	public String[] getUserList(){ //返回用戶列表
		int total=0;
		for(int i=0;i<num;i++){
			if(users[i]!=null) total++;
		}
		String[] a = new String[total];
		int index = 0;
		for(int j=0;j<num;j++){
			if(users[j]!=null){
				a[index] = users[j];
				index++;
			}	
		}
		return a;
	}
	
	public void print(){
		for(int i=1;i<=num;i++){
			if(users[i]!=null){
				System.out.println(i+" : "+users[i]);
			}
		}
	}
}

class StreamData implements Serializable{
	String fromName=null;
	String toName=null;
	
	String dataType=null;
	String fontFamily=null;
	int fontSize = 0;
	int rgb = 0;
	
	int length=0;
	byte[] bytes=null;
		
	
	public StreamData(){
	}
	
	public StreamData(String fromName,String toName,String dataType,String fontFamily,int fontSize,int rgb,byte[]bytes,int length){
		this.fromName=fromName;
		this.toName = toName;
		this.dataType = dataType;
		this.fontFamily = fontFamily;
		this.fontSize = fontSize;
		this.rgb = rgb;
		this.length = length;
		this.bytes = new byte[bytes.length];
		System.arraycopy(bytes,0,this.bytes,0,bytes.length);
	}
	
	private void writeObject(ObjectOutputStream out) throws IOException{		
		out.writeUTF(fromName);
		out.writeUTF(toName);
		out.writeUTF(dataType);
		out.writeUTF(fontFamily);
		out.writeInt(fontSize);
		out.writeInt(rgb);
		out.writeInt(length);
		for(int i=0;i<length;i++)
		out.writeByte(bytes[i]);
	}
	
	private void readObject(ObjectInputStream in) throws IOException{
		fromName = in.readUTF();
		toName = in.readUTF();
		dataType = in.readUTF();
		fontFamily = in.readUTF();
		fontSize = in.readInt();
		rgb = in.readInt();
		length = in.readInt();
		bytes = new byte[length];
		for(int i=0;i<length;i++)
		bytes[i] = in.readByte();
		
	}
	
	public String toString(){
		return " fromName:"+fromName+"\n toName:"+toName+"\n dataType"+dataType+"\n bytes:"+new String(bytes)+"\n length:"+length;
	}
	
	public String getFromName(){
		return fromName;
	}
	
	public String getToName(){
		return toName;
	}
	
	public String getDataType(){
		return dataType;
	}
	
	public String getFontFamily(){
		return fontFamily;
	}
	
	public int getFontSize(){
		return fontSize;
	}
	
	public int getRgb(){
		return rgb;
	}
	
	public byte[] getBytes(){
		return bytes;
	}
	
	public void setFromName(String fromName){
		this.fromName = fromName;
	}
	
	public void setToName(String toName){
		this.toName = toName;
	}
	
	public void setDataType(String dataType){
		this.dataType = dataType;
	}
	
	public void setFontFamily(String fontFamily){
		this.fontFamily = fontFamily;
	}
	
	public void setFontSize(int fontSize){
	    this.fontSize = fontSize;
	}
	
	public void setRgb(int rgb){
		this.rgb = rgb;
	}
}



class MultiClientServer implements Runnable{
	
	//static int SerialNum = 0;
	static UserData userData = new UserData(21);
	static UserInfo[] userInfoList = null;
    static ObjectInputStream[] objectInputStream = new ObjectInputStream[21];
    static ObjectOutputStream[] objectOutputStream = new ObjectOutputStream[21];
	Socket[] socket;
	Socket mySocket;
	int SerialNum;
	StreamData data,data2,rename,login,newUser;
	
	public MultiClientServer(Socket[] ss,int i){
		socket = ss;
		SerialNum = i;
		mySocket = socket[i];
	}
	
	public void run(){
		int myNum = SerialNum++;
		String s;
		try{
			userInfoList= UserInfo.getUserInfoList();
		}catch (Exception e){
			e.printStackTrace();
		}
		try{	
	    objectInputStream[myNum] = new ObjectInputStream(mySocket.getInputStream());
	    objectOutputStream[myNum] = new ObjectOutputStream(mySocket.getOutputStream());
	    
	    data = null;
	    while(true){
	    while(mySocket.getInputStream().available()==0) {
	    	Thread.currentThread().sleep(50);
	    }
	    if(mySocket.getInputStream().available()!=0){
	    
	    data = (StreamData)objectInputStream[myNum].readObject();
	    
	    if(data.getToName().equals(new String("Server"))){ 	//每個客戶端在初始的時候發名字給服務器
	    if((userData.getIndex(data.getFromName())==-1))  
	    //查找已經注冊用戶
	    {
	    boolean exist = false;
	    for(int i=0;i<userInfoList.length;i++){
	    	if(userInfoList[i].name.equals(data.getFromName())){
	    		exist = true;
	    	   if(userInfoList[i].password.equals(data.getFontFamily())){//密碼正確
	    	   	login = new StreamData();
	    	   	userData.insertUser(data.getFromName(),myNum);//插入在線用戶列表
	    	   	login = new StreamData("ServerAgree",data.getFromName(),"TEXT",data.getFontFamily(),data.getFontSize(),0,userInfoList[i].toString().getBytes(),userInfoList[i].toString().getBytes().length);
	    	   	objectOutputStream[myNum].writeObject(login);
	    	   	break;
	    	   }
	    	   else{//密碼不正確
	    	   	login = new StreamData("ServerDisAgree",data.getFromName(),"TEXT",data.getFontFamily(),data.getFontSize(),0,new String("ServerDisAgree").getBytes(),new String("ServerDisAgree").getBytes().length);
	    	   	objectOutputStream[myNum].writeObject(login);
	    	   	break;
	    	   }
	    	}
	    }
	    if(exist ==false){//用戶不存在
	    		login = new StreamData("ServerNotExist",data.getFromName(),"TEXT",data.getFontFamily(),data.getFontSize(),0,new String("ServerNotExist").getBytes(),new String("ServerNotExist").getBytes().length);
	    	   	objectOutputStream[myNum].writeObject(login);
	    	}
	    }
	    else{          //重名,服務器拒絕
	           rename = new StreamData("ServerRename",data.getFromName(),"TEXT",data.getFontFamily(),data.getFontSize(),0,new String("重名").getBytes(),new String("重名").getBytes().length);
	           objectOutputStream[myNum].writeObject(rename);//通知原來的客戶端
	    }
	    String[] userList = userData.getUserList();
	    for(int i=0;i<userList.length;i++){//給所有的客戶端發送用戶列表
	    	data2 = new StreamData("Server",userList[i],"TEXT",data.getFontFamily(),data.getFontSize(),data.getRgb(),StringOperate.arrayToString(userData.getUserList()).getBytes(),StringOperate.arrayToString(userData.getUserList()).getBytes().length);
	        objectOutputStream[userData.getIndex(data2.getToName())].writeObject(data2);
	    }
	    
	    }
	    else if(data.getToName().equals(new String("ServerExit"))){ //刪除退出用戶列表
	    	userData.removeUser(data.getFromName());
	    	String[] userList = userData.getUserList();
	    	for(int i=0;i<userList.length;i++){
	    	data2 = new StreamData("Server",userList[i],"TEXT",data.getFontFamily(),data.getFontSize(),data.getRgb(),StringOperate.arrayToString(userData.getUserList()).getBytes(),StringOperate.arrayToString(userData.getUserList()).getBytes().length);
	        objectOutputStream[userData.getIndex(data2.getToName())].writeObject(data2);
	        }
	    }
	    else if(data.getToName().equals(new String("ServerNewUser"))){
	    	//System.out.println(data.getToName());
	    	UserInfo newUserInfo = UserInfo.getUserInfo(new String(data.getBytes()));
	    	boolean exist = false;
	    	for(int i=0;i<userInfoList.length;i++){
	    		if(userInfoList[i].name.equals(newUserInfo.name)){//用戶名已經被占用
	    		newUser = new StreamData("newUserNO",data.getFromName(),"TEXT",data.getFontFamily(),data.getFontSize(),0,new String("newUserNo").getBytes(),new String("newUserNo").getBytes().length);
	    	   	objectOutputStream[myNum].writeObject(newUser);
	    	   	exist = true;
	    	   	break;
	    		}
	    	}
	    	
	    	//System.out.println(exist);
	    	
	    	if(exist == false){
	    		//更新列表
	    		newUser = new StreamData("newUserYES",data.getFromName(),"TEXT",data.getFontFamily(),data.getFontSize(),0,new String("newUserYES").getBytes(),new String("newUserYES").getBytes().length);
	    	   	objectOutputStream[myNum].writeObject(newUser);
	    	   	UserInfo[] newUserInfoList = UserInfo.addUserInfo(userInfoList,newUserInfo);
	    	   	userInfoList = newUserInfoList;
	    	   	UserInfo.writeUserInfoList(userInfoList); 	
	    	}
	    }else if(data.getToName().equals(new String("ServerUserInfo"))){
            
            String sentUserInfo = "null";
            
            //System.out.println(data.getFontFamily());
            
	    	for(int i=0;i<userInfoList.length;i++){
	    		if(userInfoList[i].name.equals(data.getFontFamily())){
	    			sentUserInfo = userInfoList[i].toString();
	    			break;
	    		}
	    	}
	    	
	    	//System.out.println(sentUserInfo);
	    	
	    	StreamData newUserInfo = new StreamData("UserInfo",data.getFromName(),"TEXT",data.getFontFamily(),data.getFontSize(),0,sentUserInfo.getBytes(),sentUserInfo.getBytes().length);
	    	objectOutputStream[myNum].writeObject(newUserInfo);	    	
	    }
	    else
	    {//數據不是發給服務器,則轉發給其他的客戶端
	    	if(userData.getIndex(data.getToName())!=-1)
	    	objectOutputStream[userData.getIndex(data.getToName())].writeObject(data);
	    }
	   
	    //userData.print();/////////////////////
	    }
	    }
//		objectOutputStream.close();
	  //  objectInputStream.close();
//	    mySocket.close();
		}catch(Exception e){
			e.printStackTrace();
	    }
   }
}


public class Server{
	public static void main(String args[]){
		int MaxClientNum = 20;
		Socket[]socket = new Socket[MaxClientNum];	
		try{
		System.out.println("Server:");
		ServerSocket server = new ServerSocket(1683);
		
		for(int i=1;i<=MaxClientNum;i++){
			socket[i] = server.accept();
			Thread t = new Thread(new MultiClientServer(socket,i));
			t.start();
		}
		server.close();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲第一久久影院| 日本韩国一区二区三区| 91免费视频大全| 欧美一区二区三区不卡| 国产精品久久久一区麻豆最新章节| 亚瑟在线精品视频| 成人手机在线视频| 欧美精品一区二区在线播放| 午夜精品久久久久久久蜜桃app| 国产成人在线视频网站| 日韩三区在线观看| 午夜精品久久久久久久| 99精品视频中文字幕| 国产日本一区二区| 精品一区二区成人精品| 欧美精品在线一区二区三区| 亚洲女爱视频在线| 91免费版pro下载短视频| 国产色91在线| 国产成人精品免费| 久久视频一区二区| 国产精品一区二区三区99| 精品福利视频一区二区三区| 日本免费新一区视频| 91精品视频网| 免费在线观看一区| 久久久综合激的五月天| 麻豆精品在线播放| 日韩你懂的在线播放| 久久精品久久99精品久久| 日韩一区和二区| 麻豆91精品视频| 久久亚洲捆绑美女| 国产精品一色哟哟哟| 国产偷v国产偷v亚洲高清| 国产精品一区二区久久精品爱涩 | 久久精品999| 欧美成人精品二区三区99精品| 日av在线不卡| 久久久不卡网国产精品一区| 国产69精品久久久久毛片| 欧美国产丝袜视频| 91视视频在线直接观看在线看网页在线看| 中文字幕视频一区二区三区久| 成人激情午夜影院| 亚洲男人的天堂一区二区| 欧美日免费三级在线| 亚洲18色成人| 欧美精品一区二区三区蜜桃视频| 国产成人丝袜美腿| 亚洲乱码国产乱码精品精可以看| 欧美在线视频全部完| 奇米精品一区二区三区四区| 久久久久久久久久久久电影| av午夜精品一区二区三区| 一区二区三区丝袜| 精品久久久久av影院 | 久久久国际精品| 99久久精品免费看国产免费软件| 亚洲一区二区三区四区中文字幕| 日韩一区二区三区在线| 国产美女精品一区二区三区| 亚洲精品国产视频| 在线综合+亚洲+欧美中文字幕| 国产一区美女在线| 亚洲三级在线免费观看| 日韩视频免费观看高清完整版在线观看| 久久精品国产精品亚洲红杏| 中文字幕一区在线观看视频| 欧美日韩一区二区在线视频| 国产曰批免费观看久久久| 亚洲免费成人av| 亚洲精品一线二线三线无人区| 91亚洲午夜精品久久久久久| 人妖欧美一区二区| 亚洲人成亚洲人成在线观看图片| 在线播放中文一区| 99久久99久久精品免费观看| 麻豆91在线播放免费| 亚洲精品视频一区二区| 亚洲精品一区在线观看| 91在线云播放| 国产福利不卡视频| 日本成人在线网站| 一区二区三区在线观看国产| 久久一区二区三区国产精品| 欧美久久免费观看| av在线一区二区三区| 精品亚洲成a人| 爽好久久久欧美精品| 亚洲少妇30p| 久久综合视频网| 6080午夜不卡| 在线一区二区视频| 不卡的av电影| 国产精品一区专区| 黑人巨大精品欧美黑白配亚洲| 亚洲一区二区欧美日韩| 亚洲人吸女人奶水| 国产精品欧美久久久久一区二区| 欧美tk—视频vk| 91精品国产aⅴ一区二区| 一本久久精品一区二区| av电影在线不卡| 成人激情视频网站| 国产一区二区三区免费看| 蜜桃视频免费观看一区| 三级久久三级久久| 日韩av中文字幕一区二区| 亚洲国产美国国产综合一区二区| 亚洲免费在线视频一区 二区| 亚洲欧洲日韩一区二区三区| 中文字幕一区三区| 日韩一区在线看| 亚洲免费观看高清在线观看| 中文字幕亚洲成人| 亚洲欧美日韩国产综合| 一区二区三区中文免费| 亚洲六月丁香色婷婷综合久久 | 久久精品二区亚洲w码| 精品一区二区久久久| 老司机精品视频导航| 精品一区中文字幕| 国产一区二区精品久久99| 国产伦理精品不卡| 菠萝蜜视频在线观看一区| 91网址在线看| 在线观看欧美精品| 91精品国产欧美一区二区成人 | 久久99日本精品| 国产激情一区二区三区四区 | 日韩精品一区二区三区中文精品| 日韩午夜激情免费电影| 精品久久久久久久久久久院品网 | 亚洲精品一线二线三线| 中文av一区二区| 亚洲午夜在线观看视频在线| 日韩和的一区二区| 久久精品国产亚洲高清剧情介绍| 国产麻豆精品在线| gogo大胆日本视频一区| 欧美私模裸体表演在线观看| 91精选在线观看| 中文字幕高清一区| 亚洲电影在线播放| 国产在线视频精品一区| 色婷婷亚洲一区二区三区| 777午夜精品视频在线播放| 久久久91精品国产一区二区精品| 国产精品的网站| 蜜臀av性久久久久蜜臀aⅴ四虎 | 欧美亚洲国产一区二区三区| 日韩一区二区不卡| 亚洲国产高清aⅴ视频| 亚洲国产中文字幕在线视频综合 | 亚洲国产精品传媒在线观看| 亚洲福利视频一区二区| 国产91综合网| 在线播放中文字幕一区| 国产精品另类一区| 天天爽夜夜爽夜夜爽精品视频| 国产v日产∨综合v精品视频| 欧美午夜精品一区| 国产精品美女久久久久aⅴ| 亚洲二区在线视频| 不卡的av电影| 日韩欧美三级在线| 一区二区三区资源| 国产成人av资源| 日韩精品一区二区三区在线观看| 一区二区三区中文字幕精品精品| 国产成人精品亚洲午夜麻豆| 欧美一区二区三区的| 亚洲国产精品一区二区久久恐怖片 | 成人国产免费视频| 日韩一区二区免费高清| 一区二区三区在线免费视频| 国产黄色成人av| 精品国产亚洲在线| 免费在线观看一区| 欧美高清视频在线高清观看mv色露露十八| 国产精品久久久久久亚洲毛片| 久久99精品国产.久久久久久| 欧美精品777| 天堂成人国产精品一区| 欧美日韩一区二区三区在线| √…a在线天堂一区| 丁香六月久久综合狠狠色| 久久久久久久性| 国产在线精品一区二区 | 91啪亚洲精品| 国产精品狼人久久影院观看方式| 高清成人在线观看| 国产亚洲欧美日韩俺去了| 国产一区二区中文字幕| 26uuu国产电影一区二区| 麻豆91在线观看| 久久―日本道色综合久久| 国模娜娜一区二区三区| 综合av第一页|