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

查看本章节

查看作业目录


需求说明:

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

实现思路:

  1. 创建 QQ 小冰类 AiRobot服务端类和用户类 User,在服务端类main方法中使用ServerSocket(8888)创建服务端套接字,同时调用accept方法等待和得到客户端Socket
  2. Socket中获取和客户端通信的输出流,并且使用PrintWriter包装,调用println方法发送信息给客户端,注意异常处理和关闭socket
  3. 在客户端User类的main方法中,使用new Socket(“127.0.0.1”8888)建立和服务端的连接,调用socket对象的获取输入流方法,使用BufferedReader进行包装为字符流,方便读取数据
  4. 调用BufferedReader对象的readLine()方法读取服务端发送的数据,注意代码中的异常处理和最后关闭流和socket
  5. 分别运行服务端的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();
				}
		}
	}
}

 

posted @ 2020-10-09 11:42  明金同学  阅读(42)  评论(0编辑  收藏  举报