在写聊天室程序想参考qq的模式。qq上QQ聊天记录显示时间时间具体是哪个时间,是服务器转发时获取的吗?

温馨提示:该条问答的文字/图片中可能存在外站链接、联系方式和其他风险信息,请注意识别,谨防上当受骗!1个回答芝士回答来自: 芝士回答2018.12.21靠谱的问答社区,专注分享知识、经验、观念。在这里,所有人都能找到答案、参与讨论满意答案咨询官方客服您可能感兴趣的内容广告点我做任务,抽手机哦
恭喜完成日常任务“天天助人1” 10金币奖励已发放
继续做任务
任务列表啊哦,你还是无名氏 登录登录做任务,奖励多多,还可抽手机哦~返回顶部侵权投诉意见反馈微博恭喜您升到级!获得Lv升级宝箱,快开启吧!开启宝箱 暂不开启}
package com.itheima.demo03;
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
/**
* @author Mr.liu
* @date 2021年04月13日 14:48
*/
public class Client {
//客户端
public static void main(String[] args) throws IOException {
//建立连接
Socket socket = new Socket("192.168.163.72", 8888);
BufferedReader bdf = new BufferedReader(new InputStreamReader(socket.getInputStream()));
try (BufferedWriter fileWriter = new BufferedWriter(new FileWriter("text.txt"))) {
//定义一个线程
new Thread(() -> {
try {
String len = null;
//读取数据,每次读取一行
while ((len = bdf.readLine()) != null) {
System.out.println("【她对你说】" + len);
fileWriter.write(socket.getInetAddress()+"说:"+len);
fileWriter.newLine();
if ("拜拜".equals(len)) {
fileWriter.close();
System.exit(0);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}).start();
//定义一个文件扫描器,用来接受收据
Scanner scanner = new Scanner(System.in);
//向服务器发送数据
OutputStream out = socket.getOutputStream();
while (true) {
System.out.println("【你对她说】:");
String content = scanner.next();
out.write((content + "\r\n").getBytes());
fileWriter.write(socket.getInetAddress()+"说:"+content);
fileWriter.newLine();
//如果等于拜拜,退出
if ("拜拜".equals(content)) {
fileWriter.close();
System.exit(0);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.itheima.demo03;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
/**
* @author Mr.liu
* @date 2021年04月13日 14:48
*/
public class Server {
public static void main(String[] args) throws IOException {
//与客户端建立连接
ServerSocket serverSocket = new ServerSocket(8888);
//正在的等待连接
Socket accept = serverSocket.accept();
//如果,连接成功,则读取数据,否则。。。
BufferedReader bdf1 = new BufferedReader(new InputStreamReader(accept.getInputStream()));
new Thread(() -> {
try {
String len = null;
//读取数据,每次读取一行
while ((len = bdf1.readLine()) != null) {
System.out.println("【她对你说】" + len);
}
} catch (IOException e) {
e.printStackTrace();
}
}).start();
Scanner scanner = new Scanner(System.in);
OutputStream out = accept.getOutputStream();
//向客户端发送数据,如果等于拜拜,则退出
while (true) {
System.out.println("【你对他说】:");
String content = scanner.next();
out.write((content + "\r\n").getBytes());
if ("拜拜".equals(content)) {
System.exit(0);
}
}
}
}
注意:先启动服务端}
Java小程序之简单多人聊天室的实现(山寨QQ前传)一、前言:通过对Java服务器生猛上手的学习,已经基本明白了Java中通信的基本原理,以及服务器,ip,ip地址的概念;我们思考下服务器到底是用来干嘛的呢?当多台客户端连上服务器以后,服务器需要提供的就是为连接进来的客户端提供相应的服务;具体的来说就是处理不同客户端发来的消息或者数据,然后把这些消息或者数据发送到另外的客户端;服务器的目的就是正确转发消息或者数据;二、简单多人聊天室的实现思路:1、创建服务器,等待客户端的连接2、客户端连接进来以后,获取输入输出流,利用输入输出流发送消息;3、发送服务器连接成功的信息给客户端,并提示客户端输入账户和密码进行登录4、服务器接收客户端发来的账号和密码,校验成功后,提示登录成功,开始多人聊天
难点:如何实现多人聊天?
定义一个容器:用于封装所有的ServerThread线程对象,遍历该容器中的对象,将消息转发给每一个客户端(自己可以除外)问题:当某个客户端退出后,其他客户端再发消息的时候,转发就会报错;解决:当有客户端退出时,将该客户端从容器中移除;不在向该客户端转发消息;三、程序源代码:连接服务器类:package com.huaxin.server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class Myserver {
public static ArrayList<ServerThread>list =new ArrayList<ServerThread>();
public
void initServer() {
try {
//创建服务器对象,并指定端口号
ServerSocket server = new ServerSocket(9090);
System.out.println("服务器已经建立......");
//不断获取客户端的连接
while(true){
Socket socket =server.accept();
System.out.println("客户端连接进来了......");
//当有客户端连接进来以后,开启一个线程,用来处理该客户端的逻辑,
ServerThread st = new ServerThread(socket);
st.start();
//添加该客户端到容器中
list.add(st);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
服务器线程处理类:
package com.huaxin.server;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class ServerThread extends Thread {
public Socket socket;
public InputStream ins;
public OutputStream ous;
public ServerThread(Socket socket) {
this.socket = socket;
}
public void run() {
try {
// 获取输入输出流
ins = socket.getInputStream();
ous = socket.getOutputStream();
// 发送消息给客户端
String msg = "welcome to zhou's server !";
sendMsg(ous, msg);
// 发送要求登录信息给客户端
String userinfo = "please input your name:";
sendMsg(ous, userinfo);
// 获取客户端输入的用户名
String userName = readMsg(ins);
// 发送要求密码信息给客户端
String pwd = "please input your password:";
sendMsg(ous,
pwd);
// 获取客户端输入的密码
String pass = readMsg(ins);
// 登录验证
boolean falg = loginCheck(userName, pass);
// 校验不通过时,循环校验
while (!falg) {
msg = "Fail to connect server......";
sendMsg(ous, msg);
msg = "please check your name and password and login again.....";
sendMsg(ous, msg);
msg = "please input your name:";
sendMsg(ous, msg);
// 获取客户端输入的用户名
userName = readMsg(ins);
// 发送要求密码信息给客户端
msg = "please input your password:";
sendMsg(ous, msg);
// 获取客户端输入的密码
pass = readMsg(ins);
falg = loginCheck(userName, pass);
}
// 校验成功后:开始聊天
msg = "successful connected..... you can chat with your friends now ......";
sendMsg(ous, msg);
// 聊天处理逻辑
//读取客户端发来的消息
msg=readMsg(ins);
//输入bye结束聊天
while(!"bye".equals(msg)){
//给容器中的每个对象转发消息
for (int i = 0; i <Myserver.list.size(); i++) {
ServerThread st =Myserver.list.get(i);
//不该自己转发消息
if(st!=this){
sendMsg(st.ous, userName+"
is say:"+msg);
}
}
//等待读取下一次的消息
msg=readMsg(ins);
}
} catch (Exception e) {
System.out.println("客户端不正常关闭......");
//
e.printStackTrace();
}
//有异常后统一将流关闭
try {
ins.close();
ous.close();
socket.close();
//将当前已经关闭的客户端从容器中移除
Myserver.list.remove(this);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 校验客户端输入的账号和密码的函数,由于没有数据库,暂时写死了
public boolean loginCheck(String name, String pwd) {
if (name.equals("zhou") && pwd.equals("zhou")
name.equals("user") && pwd.equals("pwd")
name.equals("huaxinjiaoyu") && pwd.equals("huaxinjiaoyu")) {
return true;
}
return false;
}
// 发送消息的函数
public void sendMsg(OutputStream os, String s) throws IOException {
// 向客户端输出信息
byte[] bytes = s.getBytes();
os.write(bytes);
os.write(13);
os.write(10);
os.flush();
}
// 读取客户端输入数据的函数
public String readMsg(InputStream ins) throws Exception {
// 读取客户端的信息
int value = ins.read();
// 读取整行 读取到回车(13)换行(10)时停止读
String str = "";
while (value != 10) {
// 点击关闭客户端时会返回-1值
if (value == -1) {
throw new Exception();
}
str = str + ((char) value);
value = ins.read();
}
str = str.trim();
return str;
}
}
函数入口类:
package com.huaxin.server;
public class Test {
public static void main(String[] args) {
Myserver ms = new Myserver();
ms.initServer();
}
}
四、运行结果:(务必先启动服务器)第一次错误是由于未先开启服务器:输入正确的用户名和密码进行登录:多人聊天界面:(中间有一次密码输入错误,但是还是可以再次输入.......)五、总结:通过完成这个简单的多人聊天的小程序,有一种说不出来的喜悦感;原来用Java来实现简单的多人聊天这么简单;自己也能写出一个小小的聊天的软件了呢......接下来我们是不是可以写个山寨版的QQ了呢......哈哈........拭目以待.......共勉!}

我要回帖

更多关于 QQ聊天记录显示时间 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信