首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java的容易群聊实现

2013-03-29 
java的简单群聊实现package GroupChatimport java.io.IOExceptionimport java.net.ServerSocketimport

java的简单群聊实现
package GroupChat;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;/** * 创建调用服务器线程的主类 * @author Administrator * */public class ThreadMain {/** * @param args */public static void main(String[] args) {ThreadMain tm=new ThreadMain();tm.StrSer(1234);}public void StrSer(int port){try {ServerSocket ss=new ServerSocket(port);System.out.println("服务器创建成功");while(true){Socket client=ss.accept();System.out.println("客户机连接");ServerThread st=new ServerThread(client);st.start();}} catch (IOException e) {e.printStackTrace();}}}

?服务器单个线程类:

package GroupChat;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.Socket;/** * 创建服务器线程类,该类继承自Thread * @author Administrator * */public class ServerThread extends Thread{private Socket client;//服务器连接对象private OutputStream out;//输出流对象private InputStream in;//输入流对象public User use=new User();/** * 构造方法,传入该线程要处理的连接对象 * @param lient:要处理的连接对象 */public ServerThread(Socket client){this.client=client;}/** * 重写线程的Run方法 */public void run(){//处理连接的方法ProcessChat();}/** * 处理连接的方法 */private void ProcessChat() {try {out=client.getOutputStream();//获得相应的输出流对象in=client.getInputStream();//获得相应的输入流对象BufferedReader br=new BufferedReader(new InputStreamReader(in));//实例化缓冲读取信息的对象SendMsg("欢迎来到服务器\n请输入用户名:");use.name=br.readLine();SendMsg("请输入密码:");use.pew=br.readLine();boolean bool=DOT.Checkuse(use);//检验用户信息if(!bool){client.close();//如果检查不通过就关闭return;}ChatTool.AddThread(this);//添加线程use.logintime=System.currentTimeMillis();use.adress=client.getRemoteSocketAddress().toString();String str="";str=br.readLine();//当str为空时,也要退出。处理强行关闭客户机while(!"bye".equals(str)&&str!=null){System.out.println(use.name+":"+str);ChatTool.SendAll(use, str);str=br.readLine();}out.write(str.getBytes());ChatTool.DeleThread(this);client.close();} catch (IOException e) {e.printStackTrace();}}/** * 向客户机发送信息的方法 * @param string:要发送的信息 */public void SendMsg(String str) {str=str+"\r\n";try {out.write(str.getBytes());out.flush();//强制输出} catch (IOException e) {e.printStackTrace();}}}

?用户验证类(预加载好了几个用户):

package GroupChat;import java.util.HashMap;import java.util.Map;/** * 创建验证用户信息的类,用来验证用户信息 * @author Administrator * */public class DOT {private static Map<String,String> map=new HashMap<String, String>();/** * 创建验证用户信息的方法 * @param use:要验证的用户 * @return:是否成功 */public static boolean Checkuse(User use){if(use.pew.equals(map.get(use.name))){return true;//验证成功就返回True}return false;}static{for(int i=0;i<5;i++){User use=new User();use.name="name"+i;use.pew="pew"+i;map.put(use.name,use.pew);//放入map中}}}

?

存装静态方法:

package GroupChat;import java.util.HashMap;import java.util.Map;/** * 创建验证用户信息的类,用来验证用户信息 * @author Administrator * */public class DOT {private static Map<String,String> map=new HashMap<String, String>();/** * 创建验证用户信息的方法 * @param use:要验证的用户 * @return:是否成功 */public static boolean Checkuse(User use){if(use.pew.equals(map.get(use.name))){return true;//验证成功就返回True}return false;}static{for(int i=0;i<5;i++){User use=new User();use.name="name"+i;use.pew="pew"+i;map.put(use.name,use.pew);//放入map中}}}

?用户类:

package GroupChat;/** * 创建用户信息类,用来存放用户信息 * @author Administrator * */public class User {public String name;//用户名字public String pew;//用户密码public long logintime;//用户的上线时间public String adress;//用户的地址}

?

热点排行