编写Java程序,使用 Socket类模拟用户加入 QQ 群时,QQ 小冰发送欢迎消息的场景(用户充当客户端,QQ 小冰充当服务端)

简介: 编写Java程序,使用 Socket类模拟用户加入 QQ 群时,QQ 小冰发送欢迎消息的场景(用户充当客户端,QQ 小冰充当服务端)

需求说明:


小冰是微软公司研发的人工智能机器人,被腾讯公司加入 QQ 群后,立即受到千万网友的喜爱。现在使用 Socket类模拟用户加入 QQ 群时,QQ 小冰发送欢迎消息的场景(用户充当客户端,QQ 小冰充当服务端)


40.png


实现思路:


创建 QQ 小冰类 AiRobot服务端类和用户类 User,在服务端类main方法中使用ServerSocket(8888)创建服务端套接字,同时调用accept方法等待和得到客户端Socket

从Socket中获取和客户端通信的输出流,并且使用PrintWriter包装,调用println方法发送信息给客户端,注意异常处理和关闭socket

在客户端User类的main方法中,使用new Socket(“127.0.0.1”8888)建立和服务端的连接,调用socket对象的获取输入流方法,使用BufferedReader进行包装为字符流,方便读取数据

调用BufferedReader对象的readLine()方法读取服务端发送的数据,注意代码中的异常处理和最后关闭流和socket

分别运行服务端的main和客户端的main进行测试,切换观察控制台输出


实现代码:


QQ小冰类(AiRobot)


import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class AiRoot {
  public static void main(String[] args) {
    ServerSocket server = null;
    PrintWriter writer = null; 
    try {
      server = new ServerSocket(9999);
      Socket socket = server.accept();
      OutputStream os = socket.getOutputStream();
      writer = new PrintWriter(os);
      writer.println("欢迎新成员<张三加入,让大家认识一下吧!>");
      System.out.println(writer);
    } catch (IOException e) {
      e.printStackTrace();
    }finally {
        try {
          if (writer != null) {
            writer.close();
            server.close();
          }
        } catch (IOException e) {
          e.printStackTrace();
        }
    }
  }
}


用户类(User)


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class User {
  public static void main(String[] args) {
    Socket client = null;
    BufferedReader br = null;
    try {
      client = new Socket("127.0.0.1",9999);
      InputStream is = client.getInputStream();
      InputStreamReader reader = new InputStreamReader(is);
      br = new BufferedReader(reader);
      String content = br.readLine();
      System.out.println("QQ小冰说:"+content);
    } catch (IOException e) {
      e.printStackTrace();
    }finally {
        try {
          if (br != null) {
            br.close();
            client.close();
          }
        } catch (IOException e) {
          e.printStackTrace();
        }
    }
  }
}
相关文章
|
27天前
|
Java
如何在Java中实现多线程的Socket服务器?
在Java中,多线程Socket服务器能同时处理多个客户端连接以提升并发性能。示例代码展示了如何创建此类服务器:监听指定端口,并为每个新连接启动一个`ClientHandler`线程进行通信处理。使用线程池管理这些线程,提高了效率。`ClientHandler`读取客户端消息并响应,支持简单的文本交互,如发送欢迎信息及处理退出命令。
|
2月前
|
Java API 开发者
Java网络编程基础与Socket通信实战
Java网络编程基础与Socket通信实战
|
1月前
|
网络协议 安全 Java
Java中的网络编程:Socket编程详解
Java中的网络编程:Socket编程详解
|
1月前
|
Java API 开发者
Java中的Socket编程与应用
Java中的Socket编程与应用
|
1月前
|
Java 大数据
如何在Java中进行网络编程:Socket与NIO
如何在Java中进行网络编程:Socket与NIO
|
1月前
|
网络协议 安全 Java
Java中的网络编程:Socket编程详解
Java中的网络编程:Socket编程详解
|
1月前
|
Java API 开发者
Java中的Socket编程与应用
Java中的Socket编程与应用
|
1月前
|
Java API 开发者
Java网络编程基础与Socket通信实战
Java网络编程基础与Socket通信实战
|
27天前
|
网络协议 Java
如何在Java中使用Socket编程实现TCP连接?
在Java中,通过Socket编程实现TCP连接非常常见。以下演示了基本的TCP通信流程,可根据具体需求进行扩展。
|
1月前
|
监控 Java API
Java Socket编程入门
Java Socket编程入门