java socket 多人聊天简陋版

package wan;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;


public class TomcatImp {
    private boolean shutdown=false;
    private Map<String,Socket> clients=new HashMap<>();
    private List<Socket> cList=new ArrayList<>();
    public void openServer() {
        try {
            ServerSocket serverSocket=new ServerSocket(8088,2,InetAddress.getByName("127.0.0.1"));
            Socket socket=null;
            InputStream inputStream=null;
            OutputStream outputStream=null;
            
            while(!shutdown){
                StringBuffer http=new StringBuffer();
                socket=serverSocket.accept();
                outputStream=socket.getOutputStream();
                inputStream=socket.getInputStream();
                byte[] bytes=new byte[1024];
          
                int i=inputStream.read(bytes);//会吧http请求全部读出放到byte数组里面,i为字符长度,一个byte存一个字符
                System.out.println("我倒要看看这个读取出来的是什么:"+i);
                System.out.println("读出的byte:"+bytes);
                for(int j=0;j<i;j++) {
                    http.append((char)bytes[j]);//在byte数组中的二进制数据自动变成了十进制数据,一个一个把他强转成char组成string
                }
                System.out.println("http:"+http);
                
                String errorMessage = "HTTP/1.1 404 File Not Found\r\n" +
                  "Content-Type: text/html\r\n" +
                  "Content-Length: 35\r\n" +
                  "\r\n" +
                  "<h1>hi hello world</h1><br>";
   
                 outputStream.write(errorMessage.getBytes());//调戏客户端
                 try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                 String errorMessage2 = 
                         "love you too";
          
                        outputStream.write(errorMessage2.getBytes());//调戏客户端
                socket.close();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
    }
    //多人聊天服务
    private void qqServer() {
        SubThread subThread=new SubThread();
        subThread.start();
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(8099,10,InetAddress.getByName("127.0.0.1"));
        } catch (UnknownHostException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        while(!shutdown){
            try {
                
                Socket socket=serverSocket.accept();
                clients.put(socket.getPort()+"*"+socket.getInetAddress(), socket);
                cList.add(socket);
                byte[] bs=new byte[2048];
                int i=socket.getInputStream().read(bs);
                System.out.println(+socket.getPort()+":"+socket.getInetAddress()+"conn-msg:"+new String(bs,0,i));
                
                socket.getOutputStream().write(("欢迎加入聊天,我吃妳==》"+socket.getPort()+":"+socket.getInetAddress()+"").getBytes());
                
                ForwordMsgThread thread=new ForwordMsgThread(socket);
                thread.start();
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    
    private String sendMsgToAll() {
        System.out.println("please input message:");
        Scanner scanner=new Scanner(System.in);
        String msgString=scanner.nextLine();
        return msgString;
    }
//获取浏览器url
    private String getUrl(String s) {
        
        return "";
    }
 //监听每个客户端的消息并发送给其他客户端
    class ForwordMsgThread extends Thread{
       private Socket socket0=null;
       public  ForwordMsgThread(Socket socket) {
        socket0=socket;
    }
        @Override
        public void run() {
            while(true){
                byte[] b=new byte[1024];
                try {
                    int i=socket0.getInputStream().read(b);
                    System.out.println(new String(b,0,i));
                    for(Map.Entry<String, Socket> entry:clients.entrySet()) {
                        if(entry.getKey()!=socket0.getPort()+"*"+socket0.getInetAddress()) {
                            entry.getValue().getOutputStream().write(new String(b,0,i).getBytes());
                        }
                    }
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            
        }
    }
    
  class SubThread extends Thread{
        @Override
        public void run() {
            while(true) {
                String msg=sendMsgToAll();
                for(Socket socket:cList) {
                    try {
                        socket.getOutputStream().write(msg.getBytes());
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    };
                }
            }
        }
        
    }
  
    public static void main(String [] args) {
        TomcatImp tomcat=new TomcatImp();
        //tomcat.openServer();
        tomcat.qqServer();
        
    }
    
  
}
、、、、、、、、、、、、、    d.ngrok.xiaomiqiu.cn/vv   、好看的、、、、、、、、、、、、、、、、、、、、、、、、

package wan;

import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

import com.sun.org.apache.bcel.internal.generic.NEW;

public class Cli {
    private static Socket socket=null;
    public static void main(String[] args) {
        try {
            socket=new Socket(InetAddress.getByName("127.0.0.1"),8099);
            Cli.InputThread thread=new Cli().new InputThread(socket);
            
            thread.start();
            socket.getOutputStream().write("love you".getBytes());
            InputStream inputStream= socket.getInputStream();
            StringBuffer stringBuffer=new StringBuffer();
            byte[] b=new byte[1024];
            int i=inputStream.read(b);
            for(int j=0;j<i;j++) {
               stringBuffer.append((char)b[j]) ;
            }
            System.err.println(stringBuffer);
            System.out.println(new String(b,0,i,"utf-8"));
            while(true) {
            byte[] b2=new byte[1024];
            int i2=inputStream.read(b2);
            System.out.println(new String(b2,0,i2,"UTF-8"));
            }
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         
    }
    class InputThread extends Thread{
     Socket  socket0=null;
     public InputThread(Socket socket) {
        socket0=socket;
    }
        @Override
        public void run() {
           while(true) {
               Scanner scanner=new Scanner(System.in);
               String mString=scanner.nextLine();
               try {
                socket0.getOutputStream().write(mString.getBytes());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
               
           }
            
        }
        
        
    }
}
 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值