package my.tcp;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;
public class Send implements Runnable {
private String name;
private DataOutputStream dos = null;
private boolean isRunning = true;
public Send(Socket client,String name) {
try {
dos = new DataOutputStream(client.getOutputStream());
this.name = name;
} catch (Exception e) {
e.printStackTrace();
isRunning = false;
CloseUtil.closeall(dos);
}
}
public void send() {
Scanner in = new Scanner(System.in);
String msg = in.next();
try {
dos.writeUTF(name + ":" + msg);
} catch (Exception e) {
e.printStackTrace();
isRunning = false;
CloseUtil.closeall(dos);
}
}
@Override
public void run() {
while(isRunning) {
send();
}
}
}
package my.tcp;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;
public class Receive implements Runnable {
private DataInputStream dis = null;
private boolean isRunning = true;
public Receive(Socket client) {
try {
dis = new DataInputStream(client.getInputStream());
} catch(Exception e) {
e.printStackTrace();
isRunning = false;
CloseUtil.closeall(dis);
}
}
public void receive() {
try {
String msg = dis.readUTF();
System.out.println(msg);
} catch (Exception e) {
e.printStackTrace();
isRunning = false;
CloseUtil.closeall(dis);
}
}
@Override
public void run() {
while(isRunning) {
receive();
}
}
}
package my.tcp;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Server {
private ServerSocket server = null;
private Socket client = null;
private List
public static void main(String[] args) {
new Server().connect();
}
public void connect() {
try{
server = new ServerSocket(8888);
while(true) {
client = server.accept();
System.out.println("一个客户端连接上来了");
Client c = new Client(client);
list.add(c);
new Thread(c).start();
}
} catch(BindException e) {
System.out.println("端口已被占用");
} catch(Exception e) {
e.printStackTrace();
CloseUtil.closeall(server);
}
}
class Client implements Runnable {
private DataOutputStream dos = null;
private DataInputStream dis = null;
private boolean isRunning= true;
public Client(Socket client) {
try {
dos = new DataOutputStream(client.getOutputStream());
dis = new DataInputStream(client.getInputStream());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
isRunning = false;
CloseUtil.closeall(dos, dis);
}
}
@Override
public void run() {
while(isRunning) {
sendOthers();
}
}
public String receive() {
String message = "";
try {
message = dis.readUTF();
} catch(EOFException e) {
System.out.println("一个用户退出");
isRunning = false;
CloseUtil.closeall(dos, dis);
list.remove(this);
} catch (Exception e) {
e.printStackTrace();
}
return message;
}
public void sendOthers() {
String msg = receive();
for (Client c : list) {
if (c == this) {
continue;
}
c.send(msg);
}
}
public void send(String msg) {
try {
dos.writeUTF(msg);
dos.flush();
} catch(Exception e) {
e.printStackTrace();
isRunning = false;
CloseUtil.closeall(dos, dis);
list.remove(this);
}
}
}
}