需求说明:
小冰是微软公司研发的人工智能机器人,被腾讯公司加入 QQ 群后,立即受到千万网友的喜爱。现在使用 Socket类模拟用户加入 QQ 群时,QQ 小冰发送欢迎消息的场景(用户充当客户端,QQ 小冰充当服务端)
实现思路:
创建 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(); } } } }