





//简易多人聊天系统
package duorentongxun;
import java.io.Serializable;
public class Message implements Serializable {
private String from;
private String to;
private int type;
private String info;
@Override
public String toString() {
return "Message{" +
"from='" + from + '\'' +
", to='" + to + '\'' +
", type=" + type +
", info='" + info + '\'' +
'}';
}
public Message(String from, String to, int type, String info) {
this.from = from;
this.to = to;
this.type = type;
this.info = info;
}
public Message() {
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
}
package duorentongxun;
public final class MessageType {
public static final int TYPE_LOGIN=0x1; //登录类型
public static final int TYPE_SEND=0x2; //发送类型
}
package duorentongxun;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Clinet {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
ExecutorService es = Executors.newSingleThreadExecutor();
ObjectInputStream ois;
ObjectOutputStream oos;
try {
Socket socket = new Socket("localhost", 6666);
System.out.println("服务器连接成功");
oos = new ObjectOutputStream(socket.getOutputStream());
ois = new ObjectInputStream(socket.getInputStream());
System.out.println("向服务器输入姓名:");
String name = input.nextLine();
Message msg = new Message(name, null, MessageType.TYPE_LOGIN, null);
oos.writeObject(msg);
msg = (Message) ois.readObject();
System.out.println(msg.getInfo());
es.execute(new ReadInfoThread(ois));
boolean flag=true;
while (flag){
msg=new Message();
System.out.print("你要发给谁:");
msg.setTo(input.nextLine());
msg.setFrom(name);
System.out.print("Info:");
msg.setInfo(input.nextLine());
msg.setType(MessageType.TYPE_SEND);
oos.writeObject(msg);
}
oos.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
class ReadInfoThread implements Runnable {
private ObjectInputStream ois;
private boolean flag = true;
public ReadInfoThread(ObjectInputStream ois ) {
this.ois = ois;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
@Override
public void run() {
try {
while (flag) {
Message message = (Message) ois.readObject();
System.out.println(message.getFrom() + "对你说:" + message.getInfo());
}
if(ois!=null) {
ois.close();
}
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
package duorentongxun;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Server {
public static void main(String[] args) {
Vector<UserThread> vector=new Vector<>();
ExecutorService es = Executors.newFixedThreadPool(5);
try {
ServerSocket server = new ServerSocket(6666);
System.out.println("服务器等待连接........");
while(true){
Socket socket = server.accept();
UserThread user = new UserThread(socket, vector);
es.execute(user);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class UserThread implements Runnable{
private String name;
private Socket socket;
private Vector<UserThread> vector;
private ObjectInputStream ois;
private ObjectOutputStream oos;
private boolean flag=true;
public String getName() {
return name;
}
public UserThread(Socket socket, Vector<UserThread> vector){
this.socket=socket;
this.vector=vector;
vector.add(this);
}
@Override
public void run() {
System.out.println("客户端"+socket.getInetAddress().getHostAddress()+"已连接");
try {
ois=new ObjectInputStream(socket.getInputStream());
oos=new ObjectOutputStream(socket.getOutputStream());
while(flag){
Message message = (Message) ois.readObject();
int type=message.getType();
switch(type){
case MessageType.TYPE_LOGIN :
name=message.getFrom();
message.setInfo("欢迎你:"+name);
oos.writeObject(message);
break;
case MessageType.TYPE_SEND:
UserThread ut;
for (UserThread userThread : vector) {
if (userThread.getName().equals(message.getTo())){
userThread.oos.writeObject(message);
break;
}
}
break;
}
}
ois.close();
oos.close();
} catch (IOException | ClassNotFoundException e ) {
e.printStackTrace();
}
}
}

被折叠的 条评论
为什么被折叠?



