java聊天室的实现代码

本文实例为大家分享了java实现聊天室的具体代码,供大家参考,具体内容如下

聊天室界面:

源码:

public class ClientFrame extends Frame {

private TextField textFieldContent = new TextField();

private TextArea textAreaContent = new TextArea();

private Socket socket = null;

private OutputStream out = null;

private DataOutputStream dos = null;

private InputStream in = null;

private DataInputStream dis = null;

private boolean flag = false;

/**

* 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午9:19:51 功能:启动客户端程序

*

* @param args

*/

public static void main(String[] args) {

new ClientFrame().init();

}

/**

* 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午9:20:43 功能:对窗口进行初始化

*/

private void init() {

this.setSize(300, 300);

setLocation(250, 150);

setVisible(true);

setTitle("WeChatRoom");

// 添加控件

this.add(textAreaContent);

this.add(textFieldContent, BorderLayout.SOUTH);

textAreaContent.setFocusable(false);

pack();

// 关闭事件

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.out.println("用户试图关闭窗口");

disconnect();

System.exit(0);

}

});

// textFieldContent添加回车事件

textFieldContent.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

onClickEnter();

}

});

// 建立连接

connect();

new Thread(new ReciveMessage()).start();

}

private class ReciveMessage implements Runnable {

@Override

public void run() {

flag = true;

try {

while (flag) {

String message = dis.readUTF();

textAreaContent.append(message + "\n");

}

} catch (EOFException e) {

flag = false;

System.out.println("客户端已关闭");

// e.printStackTrace();

} catch (SocketException e) {

flag = false;

System.out.println("客户端已关闭");

// e.printStackTrace();

} catch (IOException e) {

flag = false;

System.out.println("接受消息失败");

e.printStackTrace();

}

}

}

/**

* 功能:当点击回车时出发的事件 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午9:49:30

*/

private void onClickEnter() {

String message = textFieldContent.getText().trim();

if (message != null && !message.equals("")) {

String time = new SimpleDateFormat("h:m:s").format(new Date());

textAreaContent.append(time + "\n" + message + "\n");

textFieldContent.setText("");

sendMessageToServer(message);

}

}

/**

* 功能:给服务器发送消息 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午10:13:48

*

* @param message

*/

private void sendMessageToServer(String message) {

try {

dos.writeUTF(message);

dos.flush();

} catch (IOException e) {

System.out.println("发送消息失败");

e.printStackTrace();

}

}

/**

* 功能:申请socket链接 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午10:00:38

*/

private void connect() {

try {

socket = new Socket("localhost", 8888);

out = socket.getOutputStream();

dos = new DataOutputStream(out);

in = socket.getInputStream();

dis = new DataInputStream(in);

} catch (UnknownHostException e) {

System.out.println("申请链接失败");

e.printStackTrace();

} catch (IOException e) {

System.out.println("申请链接失败");

e.printStackTrace();

}

}

/**

* 功能:关闭流和链接 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午10:01:32

*/

private void disconnect() {

flag = false;

if (dos != null) {

try {

dos.close();

} catch (IOException e) {

System.out.println("dos关闭失败");

e.printStackTrace();

}

}

if (out != null) {

try {

out.close();

} catch (IOException e) {

System.out.println("dos关闭失败");

e.printStackTrace();

}

}

if (socket != null) {

try {

socket.close();

} catch (IOException e) {

System.out.println("socket关闭失败");

e.printStackTrace();

}

;

}

}

}

package com.chat;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.EOFException;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.BindException;

import java.net.ServerSocket;

import java.net.Socket;

import java.net.SocketException;

import java.util.ArrayList;

import java.util.List;

public class ChatServer {

private List<Client> clients = new ArrayList<>();

/**

* 功能:启动ChatSever 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午10:26:41

*

* @param args

*/

public static void main(String[] args) {

new ChatServer().init();

}

/**

* 功能:对chatserver初始化 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午10:27:09

*/

private void init() {

System.out.println("服务器已开启");

// BindException

ServerSocket ss = null;

Socket socket = null;

try {

ss = new ServerSocket(8888);

} catch (BindException e) {

System.out.println("端口已被占用");

e.printStackTrace();

} catch (IOException e1) {

e1.printStackTrace();

}

try {

Client client = null;

while (true) {

socket = ss.accept();

System.out.println("客户驾到");

client = new Client(socket);

clients.add(client);

new Thread(client).start();

}

} catch (IOException e) {

e.printStackTrace();

}

}

private class Client implements Runnable {

private Socket socket = null;

InputStream in = null;

DataInputStream din = null;

OutputStream out = null;

DataOutputStream dos = null;

boolean flag = true;

public Client(Socket socket) {

this.socket = socket;

try {

in = socket.getInputStream();

din = new DataInputStream(in);

} catch (IOException e) {

System.out.println("接受消息失败");

e.printStackTrace();

}

}

public void run() {

String message;

try {

while (flag) {

message = din.readUTF();

// System.out.println("客户说:" + message);

forwordToAllClients(message);

}

} catch (SocketException e) {

flag = false;

System.out.println("客户下线");

clients.remove(this);

// e.printStackTrace();

} catch (EOFException e) {

flag = false;

System.out.println("客户下线");

clients.remove(this);

// e.printStackTrace();

} catch (IOException e) {

flag = false;

System.out.println("接受消息失败");

clients.remove(this);

e.printStackTrace();

}

if (din != null) {

try {

din.close();

} catch (IOException e) {

System.out.println("din关闭失败");

e.printStackTrace();

}

}

if (in != null) {

try {

in.close();

} catch (IOException e) {

System.out.println("din关闭失败");

e.printStackTrace();

}

}

if (socket != null) {

try {

socket.close();

} catch (IOException e) {

System.out.println("din关闭失败");

e.printStackTrace();

}

}

}

/**

* 功能:转发给所有客户端 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午11:11:59

*

* @param message

* @throws IOException

*/

private void forwordToAllClients(String message) throws IOException {

for (Client c : clients) {

if (c != this) {

out = c.socket.getOutputStream();

dos = new DataOutputStream(out);

forwordToClient(message);

}

}

}

/**

* 功能:发送给一个客户端 学校:山东师范大学 程序员:外力_Victor 日期:2016年5月8日 上午11:16:12

*

* @throws IOException

*/

private void forwordToClient(String message) throws IOException {

dos.writeUTF(message);

dos.flush();

System.out.println("转发成功!");

}

}

}

源码下载:java聊天室代码

以上是 java聊天室的实现代码 的全部内容, 来源链接: utcz.com/z/361546.html

回到顶部