java实现多人聊天室
2017-11-26 12:55
316 查看
package my.tcp;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.BindException;
import java.net.Socket;
import java.util.Scanner;
public class Client {
private Socket client = null;
private String name = null;
public static void main(String[] args) {
new Client().connect();
}
public void connect() {
try {
client = new Socket("localhost", 8888);
Scanner in = new Scanner(System.in);
System.out.print("请输入名字:");
name = in.next();
new Thread(new Send(client, name)).start();
new Thread(new Receive(client)).start();
} catch(BindException e) {
System.out.println("端口已被占用");
} catch(Exception e) {
e.printStackTrace();
}
}
}
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<Client> list = new ArrayList<>();
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);
}
}
}
}
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.BindException;
import java.net.Socket;
import java.util.Scanner;
public class Client {
private Socket client = null;
private String name = null;
public static void main(String[] args) {
new Client().connect();
}
public void connect() {
try {
client = new Socket("localhost", 8888);
Scanner in = new Scanner(System.in);
System.out.print("请输入名字:");
name = in.next();
new Thread(new Send(client, name)).start();
new Thread(new Receive(client)).start();
} catch(BindException e) {
System.out.println("端口已被占用");
} catch(Exception e) {
e.printStackTrace();
}
}
}
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<Client> list = new ArrayList<>();
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);
}
}
}
}
相关文章推荐
- 用java多线程实现一个控制台聊天室
- java网络编程,通过TCP,Socket实现多对一的局域网聊天室
- JAVA推技术聊天室的实现
- 转载的,java与AS3实现的聊天室
- 使用java基于pushlet和bootstrap实现的简单聊天室
- java网络编程,通过TCP,Socket实现多对一的局域网聊天室
- 如何实现java,jsp,ajax编写的在线聊天室啊?
- Java基础知识强化之网络编程笔记05:UDP之多线程实现聊天室案例
- 网络编程_TCP_Socket通信_聊天室_私聊_构思_实现JAVA193-194
- 基于 java nio 长连接实现的聊天室
- java实现一个简单TCPSocket聊天室功能分享
- java 聊天室之 传送图片文字等功能的实现
- java聊天室的实现代码
- 哟哟哟,JAVA组装的聊天室,最简单的实现
- [JAVA]多人聊天室控制台实现,服务端向所有客户端下发消息实现
- 基于订阅/发布模式的简易聊天室实现(java+redis)
- 面试--java实现一个多人图文聊天室(c/s或b/s),写出思路
- Java使用socket网络编程实现多人聊天室
- 用java多线程实现一个控制台聊天室
- Java实现的聊天室