客户端代码如下:
package com.xxxx.demo1027b;
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class ChatRoomClient {
Socket server;
public ChatRoomClient() throws IOException {
this.server=new Socket("127.0.0.1",8088);
new RecieveThread().start();
new SendThread().start();
}
class RecieveThread extends Thread{
@Override
public void run(){
while(true){
BufferedReader reader=null;
try {
reader=new BufferedReader(new InputStreamReader(server.getInputStream(),"utf-8"));
System.out.println(reader.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class SendThread extends Thread{
@Override
public void run(){
Scanner scanner=new Scanner(System.in);
//System.out.println("用户["+server.getLocalPort()+"]已开辟发送线程");
while(true){
String string=scanner.nextLine();
BufferedWriter writer=null;
try {
writer=new BufferedWriter(new OutputStreamWriter(server.getOutputStream(),"utf-8"));
writer.write(string+"\n");
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
class Test1{
public static void main(String[] args) throws IOException {
new ChatRoomClient();
}
}
服务端代码如下:
package com.xxxx.demo1027b;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
public class ChatRoomServer {
private List<Socket> clients;
private ServerSocket server;
private SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
public ChatRoomServer() throws IOException {
this.clients = new ArrayList();
this.server = new ServerSocket(8088);
makeConnect_and_newThread();
}
public void makeConnect_and_newThread() throws IOException {
System.out.println("服务器初始化成功");
while(true){
Socket client=server.accept();
System.out.println("用户["+client.getPort()+"]已加入群聊");
clients.add(client);
send("用户["+client.getPort()+"]已加入群聊",client);
new RecieveAndSendThread(client).start();
}
}
void send(String string,Socket src_client) throws IOException {
for(Socket client:clients){
BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(client.getOutputStream(),"utf-8"));
writer.write("用户["+src_client.getPort()+"]时间["+simpleDateFormat.format(System.currentTimeMillis())+"]:"+string+"\n");
writer.flush();
}
}
class RecieveAndSendThread extends Thread{
private Socket client;
public RecieveAndSendThread(Socket client) {
this.client=client;
}
@Override
public void run(){
BufferedReader bufferedReader=null;
try {
bufferedReader=new BufferedReader(new InputStreamReader(client.getInputStream(),"utf-8"));
while(true){
String str=bufferedReader.readLine();//???
send(str,client);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class Test{
public static void main(String[] args) throws IOException {
new ChatRoomServer();
}
}
整体架构如下: