Client部分
package 困难版聊天室.client;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import 困难聊天室.comm.Tools;
public class MsgReceiver extends Thread{
private Socket s;
public MsgReceiver(Socket s) {
this.s = s;
}
@Override
public void run() {
BufferedReader br = null;
try {
InputStream is = s.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
br = new BufferedReader(isr);
String msg = null;
while((msg = br.readLine()) != null) {
Tools.tips(msg);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(br != null)br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package 困难版聊天室.client;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
import 困难聊天室.comm.Tools;
public class SQClient {
private String ip;
private int port;
public SQClient(String ip, int port) {
super();
this.ip = ip;
this.port = port;
}
public void startChats() {
try {
Socket s = new Socket(ip,port);
MsgReceiver mr = new MsgReceiver(s);
mr.setDaemon(true);
mr.start();
Scanner sc = new Scanner(System.in);
OutputStream os = s.getOutputStream();
String msg = "";
while(!"quit".equals(msg)) {
msg = sc.nextLine();
Tools.sendMsg(os, msg);
}
System.out.println("结束聊天!");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SQClient client = new SQClient("192.168.7.149", 8090);
client.startChats();
}
}
工具部分
package 困难聊天室.comm;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Tools {
public static void tips(String msg) {
System.out.println(msg);
}
public static String ip(Socket s) {
return s.getInetAddress().getHostAddress();
}
public static String host(Socket s) {
return s.getInetAddress().getHostName();
}
public static String time(long t) {
Date d = new Date(t);
SimpleDateFormat sdf = new SimpleDateFormat("[HH:mm:ss]");
return sdf.format(d);
}
public static void sendMsg(OutputStream os,String msg) {
PrintWriter pw = new PrintWriter(os);
pw.println(msg);
pw.flush();
}
}
Server部分
package 困难聊天室.server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import 困难聊天室.comm.Tools;
public class MsgServer extends Thread{
private Socket s;
public MsgServer(Socket s) {
this.s = s;
}
@Override
public void run() {
try {
InputStream is = s.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String msg = null;
while((msg = br.readLine()) != null) {
for(Socket c:SQServer.clients) {
String content = Tools.time(System.currentTimeMillis()) + Tools.host(s)+":"+msg;
Tools.sendMsg(c.getOutputStream(), content);
}
}
} catch (Exception e) {
Tools.tips("客户端断开连接:"+Tools.ip(s));
SQServer.clients.remove(s);
}
}
}
package 困难版聊天室.client;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
import 困难聊天室.comm.Tools;
public class SQClient {
private String ip;
private int port;
public SQClient(String ip, int port) {
super();
this.ip = ip;
this.port = port;
}
public void startChats() {
try {
Socket s = new Socket(ip,port);
MsgReceiver mr = new MsgReceiver(s);
mr.setDaemon(true);
mr.start();
Scanner sc = new Scanner(System.in);
OutputStream os = s.getOutputStream();
String msg = "";
while(!"quit".equals(msg)) {
msg = sc.nextLine();
Tools.sendMsg(os, msg);
}
System.out.println("结束聊天!");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SQClient client = new SQClient("192.168.7.149", 8090);
client.startChats();
}
}
package 困难聊天室.server;
import java.io.IOException;
import java.net.Socket;
import 困难聊天室.comm.Tools;
public class TalkingServer extends Thread{
private Socket s;
public TalkingServer(Socket s) {
this.s = s;
}
@Override
public void run() {
try {
Tools.sendMsg(s.getOutputStream(), "欢迎使用softeem内网通,聊得愉快!");
new MsgServer(s).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}