使用Socket实现模拟匿名聊天(名字可随时变化)

原理:

创建一个服务端接收信息,创建一个客户端发送信息。
在客户端接收信息时,首先随机获取一个人名,再将得到的信息打印出来,最后向客户端发送反馈信息。
因为这里我只是模拟,因此只创建了一个客户端,服务端也是只接收一个客户端的信息。


首先是服务端:

package com.csdn.tcp;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class ChatClient{
    public static void main(String []args){
        Resource r = new Resource();
        ServerClient serc = new ServerClient(r);
        serc.Server();
    }
}
//创建一个随机获取名字的类
class Resource {
    String str ="喊我女王万万岁i粉红色的记忆飞天小魔女doremiAde(再见)眼不见心还念~又 鹿爱人-见窄巷"+
                   "时光巷陌 劳娘@伴我久久你终走 笙歌千年 微弱的灯光 。3d坦克天使的诱惑年格少时难免轻狂"+
                   "过又能怎样——木蘭香,遮還住傷 残花败柳*ˊMeteor宇@彪悍公主~最萌女生霸道の小男人回忆带"+
                   "分离重逢相爱爱痛三萌大帅比眼角的泪水不羁放纵的女人呼吸都会背后 余存° d3sTiny 相遇-"+
                   "中国好呻吟i久遇有者不惜 女人不花丶何来貌美如花光棍节一刺连事无成舞媚娘.少年先瘋隊隊長"+
                   "旧歌如梦中▁_.炼狱№你的绿叶我的花°°ふダ_独特 你挺能闹??有种努力叫奋斗苊是、蔬菜蛤"+
                   "Favorite丶等待[皒]犯賤ㄋ微笑,只是一种表情@小小~冰淇凌Somnus°輕描淡寫第一帅男"+
                   "迩、忘楽莪庅少年包工头2得很有文艺范 男人的故事谁懂ジ爷丶狠拽彡格不入﹏Kiss° ﹏Miss°"+
                   "屿南凉北宅女宅女蹦擦擦*笑看红尘,花落一梦破晓←前跷二郎腿的女汉子▁▁▁转身后の哭泣、、"+
                   "Bad Boy默許半個未來ぅ不狂能叫小夏以乔木青年@轮囘Li巡影っ冫笑亚洲首帅 i獨寵于妳帅的被人砍";
    String suiji(){
        //空串,准备接收一个网名
        String sss = "";
        int len = str.length();
        int count = 0;
        //随机获取姓名长度
        int ran = (int)(Math.random()*10);
        while(true){
            char ch = str.charAt((int)(Math.random()*len));
            sss += ch;
            if(count == ran)
                break;
            count++;
        }
        return  sss;
    }
}
//服务端
class ServerClient{
    Resource r;
    ServerClient(Resource r){
        this.r = r;
    }
    //创建服务
    ServerSocket ss = null;
    //监听端口
    Socket s = null;
    void Server(){
        try {
                ss = new ServerSocket(8585);
                s = ss.accept();
                while (true) {
                    //读取客户端数据
                    BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));
                    String st = bufin.readLine();
                    //随机打印名字
                    System.out.println("\""+r.suiji()+"\""+"说:");
                    //打印接收信息
                    System.out.println(st);
                    //反馈信息
                    PrintWriter pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream()), true);
                    pw.println("消息已发送。");
                    //录入“我下了88”,置标志位为true,唤醒其他所有线程
                    if(st.equals("我下了88")){
                        break;
                    }
                }
            } catch (IOException e1) {
            e1.printStackTrace();
        } finally {
            if (ss != null) {
                try {
                    ss.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (s != null) {
                try {
                    s.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

其次是客户端:
package com.csdn.tcp;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class ChatServer{
    public static void main(String []args) {
        SendServer ss1 = new SendServer();
        ss1.Client();
    }
}
//客户端
class SendServer{
    BufferedReader bur1 = null;
    //创建服务
    Socket s = null;
    public void Client() {
        try{
                s = new Socket(InetAddress.getLocalHost().getHostName(),8585);
                while(true){
                    //输入流获取键盘录入的数据
                    BufferedReader bur = new BufferedReader(new InputStreamReader(System.in));
                    //输出流
                    PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
                    //读取键盘录入的数据
                    String st = bur.readLine();
                    //将数据写入流中
                    pw.println(st);
                    //接受响应数据
                    bur1 = new BufferedReader(new InputStreamReader(s.getInputStream()));
                    String stt = bur1.readLine();
                    System.out.println(stt);
                    if(st.equals("我下了88")){
                        break;
                    }
                }
            } catch (UnknownHostException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        } finally {
            if(s!=null){
                try {
                    s.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(bur1!=null){
                try {
                    bur1.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
运行结果:


 
 

猜你喜欢

转载自blog.csdn.net/baidu_38760069/article/details/80772157