用Java实现聊天室功能
聊天室功能分为两个部分,一部分是服务器的代码实现,一部分是客户端的代码实现,那么如何实现服务器和客户端的通信连接,如何实现客户端和客户端之间的信息通信就是我们要考虑的问题了。
先看一下我们做出的聊天室效果:
接下来上代码:
//首先是服务器主程序代码
package chatroom;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @description:
* @date:created in 2020-07-08 16:19
* @author:Dylan
* @modified by:
*/
public class ChatServer {
//主函数入口
public static void main(String[] args) throws IOException {
//实例化一个服务器类的对象
ChatServer cs=new ChatServer();
//调用方法,为指定端口创建服务器
cs.setUpServer();
}
private void setUpServer() throws IOException {
// TODO Auto-generated method stub
ServerSocket server=new ServerSocket(9000);
//打印出当期创建的服务器端口号
System.out.println("服务器创建成功!端口号:"+ 9000);
while(true) {
//等待连接进入
Socket socket=server.accept();
System.out.println("进入了一个客户机连接:"+socket.getRemoteSocketAddress().toString());
//启动一个线程去处理这个对象
ServerThread st=new ServerThread(socket);
st.start();
}
}
}
//聊天室线程代码
package chatroom;
import java.io.*;
import java.net.Socket;
/**
* @description:
* @date:created in 2020-07-08 16:21
* @author:Dylan
* @modified by:
*/
public class ServerThread extends Thread {
private Socket client;//线程中的处理对象
private OutputStream ous;//输出流对象
private UserInfo user;//用户信息对象
public ServerThread(Socket client) {
this.client=client;
}
public UserInfo getOwerUser() {
return this.user;
}
@Override
public void run() {
try {
processSocket();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//在显示屏中打印信息,例如"用户名"、"密码"等等
public void sendMsg2Me(String msg) throws IOException {
msg+="\r\n";
ous.write(msg.getBytes());
ous.flush();
}
private void processSocket() throws IOException {
// TODO Auto-generated method stub
InputStream ins=client.getInputStream();
ous=client.getOutputStream(