做seo网站 公司,智库建设网站方案,湖北网站设计流程,企业用什么邮箱比较好1.从serverListener中可以看出,每一个客户端创建新的请求之后,都会把它分配给一个独立的chatsocket ,但是每一个ChatSocket都是相互独立的,他们之间并不能沟通,所以要新建一个类,将这些新建的线程管理起来,然后实现他们之间的相互通信.(类似于微信加群聊天的功能)由于一个聊天服…1.从serverListener中可以看出,每一个客户端创建新的请求之后,都会把它分配给一个独立的chatsocket ,但是每一个ChatSocket都是相互独立的,他们之间并不能沟通,所以要新建一个类,将这些新建的线程管理起来,然后实现他们之间的相互通信.(类似于微信加群聊天的功能)由于一个聊天服务器只有一个管理者,所以创建chatManager.java管理类,需要对类做单例化的处理1.项目截图2.ChatManager.javapackage com.nantian.socket;import java.util.Vector;public class ChatManager {/*** 由于一个聊天服务器只有一个管理者,所以创建chatManager.java管理类,需要对类做单例化的处理*///单例化第一步,需要构造private的构造方法private ChatManager() {}//为当前类创建实例private static final ChatManager cmnew ChatManager();public static ChatManager getChatManager() {return cm;}//以上代码完成了单例化的操作Vector vectornew Vector();//为当前类添加一个新的chatSocketpublic void add(ChatSocket cs) {vector.add(cs);}//还需实现一个方法,实现其中一个线程调用下面的方法向其他客户端发送信息//ChatSocket cs(当前线程),String out(发送的信息)public void publish(ChatSocket cs,String out) {//发送给所有线程,需要对集合中的线程进行遍历for (int i 0; i vector.size(); i) {//获取循环中的第i个对象ChatSocket csChatSocketvector.get(i);//当前发送的线程没必要接收这条信息//如果等于当前发送对象的话,就不执行发送消息if (!cs.equals(csChatSocket)) {//调用out()方法将字符串out传输出去csChatSocket.Out(out);}}}}2.ChatSocket.javapackage com.nantian.socket;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.net.Socket;public class ChatSocket extends Thread{//本地需要有一个socket对象,来接入传入的值Socket socket;/*** 创建构造方法*/public ChatSocket(Socket s) {this.sockets;}/*** 运行MyServerSocket类后,没有值输出后所写的方法* param out*/public void Out(String out) {try {socket.getOutputStream().write(out.getBytes(UTF-8));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 复写run方法,执行后台的功能*/Overridepublic void run() {//将socket的输入流进行包装try {BufferedReader brnew BufferedReader(new InputStreamReader(socket.getInputStream(),UTF-8));//创建本地对象String linenull;while ((linebr.readLine())!null) {//聊天室中的所有信息发送给所有人,需要调用publish()方法//将自己传入使用thisChatManager.getChatManager().publish(this, line);}//while循环结束,需要将当前的流关闭br.close();} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}3.MyServerSocket.javapackage com.nantian.socket;//ctrlshifto删除多余的jar包public class MyServerSocket {public static void main(String[] args) {new ServerListener().start();}}4.ServerListener.javapackage com.nantian.socket;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import javax.swing.JOptionPane;public class ServerListener extends Thread{Overridepublic void run() {try {//port取值范围:1-65535(通常取值较大,这样可以和系统的分开)ServerSocket serverSocketnew ServerSocket(12345);//循环监听来自客户端的连接while(true) {//监听客户端的连接//accept()为一个阻塞的方法,会阻塞当前的线程//ServerSocket的accept()方法是侦听并接受到此套接字的连接//就是一直等待连接此方法在连接传入之前一直阻塞。直到接受到有socket的连接。//故创建ServerLIstener extends ThreadSocket socketserverSocket.accept();//建立连接JOptionPane.showMessageDialog(null, 有客户端连接到了本机的12345端口);//因为每一个Socket要与客户端独立的通信,所以socket需要另起一个线程//将socket传递给新的线程,用于socket通信,故创建ChatSocket extends ThreadChatSocket csnew ChatSocket(socket);cs.start();//将cs添加到聊天管理器中ChatManager.getChatManager().add(cs);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}5.run as --java applicationcmd,输入telnet localhost 12345,截图如下