本文主要是介绍一个简单的java聊天室,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
利用java Socket编写的群聊室,可以自己拷过去试试
Server端:
package net3;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;public class Server {private List<ServerThread> clients = null;public static void main(String[] args) {new Server().startUp();}private void startUp() {ServerSocket ss = null;Socket s = null;try {ss = new ServerSocket(5858);clients = new ArrayList<ServerThread>();while (true) {s = ss.accept();ServerThread st = new ServerThread(s);new Thread(st).start();}} catch (IOException e) {e.printStackTrace();} finally {try {if (ss != null) ss.close();} catch (IOException e) {e.printStackTrace();}}}private class ServerThread implements Runnable {private Socket s = null;private BufferedReader br;private PrintWriter out;private String name;private boolean flag = true;public ServerThread(Socket socket) throws IOException {this.s = socket;br = new BufferedReader(new InputStreamReader(socket.getInputStream()));out = new PrintWriter(socket.getOutputStream(), true);String str = br.readLine();name = str+"["+socket.getInetAddress().getHostAddress()+":"+socket.getPort()+"]";clients.add(this);send(name+"上线了");}private void send(String msg) {for (ServerThread st : clients)st.out.println(msg);}private void receive() throws IOException {String str = null;while ((str=br.readLine()) != null) {if (str.equalsIgnoreCase("quit")) {stop();out.println("disconnect");break;}send(name+":"+str);}}private void stop() {clients.remove(this);flag = false;send(name+"已经下线了");}@Overridepublic void run() {try {while (true) {if (!flag) break;receive();}} catch (SocketException e) {stop();} catch (IOException e) {e.printStackTrace();} finally {try {if (s != null) s.close();} catch (IOException e) {e.printStackTrace();}}}}
}
Client端
package net3;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;public class Client {private Socket s;private BufferedReader br; private PrintWriter out;private boolean flag = true;public static void main(String[] args) {new Client().stratUp();}private void stratUp() {BufferedReader sbr = null;try {s = new Socket("127.0.0.1", 5858);out = new PrintWriter(s.getOutputStream(), true);br = new BufferedReader(new InputStreamReader(s.getInputStream()));out.println("老林");
// out.println("老周");sbr = new BufferedReader(new InputStreamReader(System.in));new Thread(new ClientThread()).start();String str = null;while (flag && (str=sbr.readLine())!=null) {if (!flag) break;out.println(str);}} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {if (s != null) s.close();} catch (IOException e) {e.printStackTrace();}try {if (sbr != null) s.close();} catch (IOException e) {e.printStackTrace();}}}private void receive() {try {String rs = br.readLine();if (rs.equalsIgnoreCase("disconnect")) {flag = false;System.out.println("点击回车退出");}System.out.println(rs);} catch (IOException e) {e.printStackTrace();}}private class ClientThread implements Runnable {@Overridepublic void run() {while (true) {if (!flag) break;receive();}}}}
这篇关于一个简单的java聊天室的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!