聊天室-服务器

服务器是用java写的,放在eclips中运行

public class MyServer {

 public static ArrayList<Socket> listSocket = new ArrayList<>();
//将客户端添加到集合中
 public static void main(String[] args)   {
	try {
	   	   ServerSocket server = new ServerSocket(7567);//服务器启动
		   while(true) {
		    Socket socket = server.accept();//监听,等待连接,一旦有client端连接便创建socket实例
		    String time = getCurrentTime();//获取当前时间
		    System.out.println(time);
		    System.out.println("ip:" + socket.getInetAddress().getHostAddress() + "   port:" + socket.getPort() +"   加入聊天室");
		    listSocket.add(socket);
	    new Thread(new ChatThread(socket)).start();
	   }
   
  }catch(Exception e) {
  	 e.printStackTrace();
  	 System.out.println("服务器崩溃");
  }
 }
 static String getCurrentTime() {
	  Date d = new Date();
	  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	  return sdf.format(d);
 }

class ChatThread implements Runnable{
	 private Socket socket;
	 private OutputStream out;
	 private InputStream reader;
	 public ChatThread(Socket socket) throws IOException{
	  this.socket = socket;
	 }
	 public void run() {
	  
	  try {
	   int len;
	   byte[] arr = new byte[1024 * 6];
	   reader = socket.getInputStream();
	   while((len = reader.read(arr)) != -1) {
	    String line = new String(arr,0,len) + "\n";
	    for(Iterator<Socket> it = MyServer.listSocket.iterator();it.hasNext();) {//使用迭代器进行遍历集合
	     Socket st = it.next();
	     try {
	      if(st.equals(socket)) {
	       continue;
	      }
	      String line1 = new String(arr,0,len,"utf-8");//接收的内容转化为"utf-8",防止中文乱码
	      out = st.getOutputStream();
	      out.write(line1.getBytes("utf-8"));//防止中文乱码
	     }catch(Exception e ) {
	      System.out.println(MyServer.getCurrentTime() + "     " +  st.getPort() + "   退出群聊");
	      it.remove();
	      MyServer.listSocket.remove(st);
	     } 
	    }
	   }
	  } catch (IOException e) {
	   e.printStackTrace();
	  }
	 }
}

效果如下图:

在这里插入图片描述
在启动客户端之前先要启动服务器。服务器是手动开启和关闭的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值