第一范文网 - 专业文章范例文档资料分享平台

用java实现聊天室基础互动

来源:用户分享 时间:2025/6/6 11:03:02 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

如何用java语言实现聊天室基础互动

代码如下:

运行程序时应先打开服务端,再打开客户端进行连接(可打开多个客户端)

服务端代码:

package chat;

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream;

import java.io.InputStreamReader; import java.io.OutputStream;

import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; /**

* java.net.Server

* 运行在服务端Socket

* ServerSocket有俩个主要作用:

* 1:向操作系统申请端口,客户端就是通过

* 这个端口与服务器端应运程序建立连接的, * 2:监听服务端:一旦客户端Scket通过端口连接 * 这里就会感知并自动创建一个Socket与客户端连接 * @author hw * */

public class Server {

private ServerSocket server; /*

* 存放所有客户端的输出流 */

private Listallout; public Server(){ try { /* * 实例化ServerSocket的同时, * 向系统申请服务端口,若端口被其他 * 申请应用程序占用,会抛出异常。

*/ server = new ServerSocket(8089); allout = new ArrayList(); } catch (Exception e) { } }

public void start(){ try { /* * ServerSocket提供了方法 * Socket accept()

* 该方法是一个阻塞方法,调用后会一直 * 监听端口,直到一个客户端通过该端口 * 建立连接,这时accept会返回一个Socket * 通过这个Socket就可以与客户端通讯了 */

while(true){//循环接收不同客户端的连接 System.out.println(\等待一个客户端连接...\Socket socket = server.accept();

System.out.println(\与一个客户端建立了连接\ /*

* 启动线程,来完成与该客户端的交互 */ ClientHandler handler = new ClientHandler(socket); Thread t = new Thread(handler); t.start(); } } catch (Exception e) { e.printStackTrace(); } }

public static void main(String[] args) { try { Server server = new Server(); server.start(); } catch (Exception e) { e.printStackTrace();

} } /*

System.out.println(\服务端启动失败\

* 该线程负责与指定客户端进行交互工作 */

private class ClientHandler implements Runnable{ /**

* 该线程就是通过这个Socket与指定的客户端交互的 */

private Socket socket;

//客户端的地址信息 private String host;

public ClientHandler(Socket socket){ this.socket = socket; /* * 通过Socket获取远端计算机地址信息 * 对于服务端这边而言,远端指的是客户端 * */ InetAddress address = socket.getInetAddress(); //获取ip地址的字符串形式 host = address.getHostAddress(); } /*

* 广播消息给所有客户端 *

* @see java.lang.Runnable#run() */

private void sendMessage(String message){ synchronized (allout) { for(PrintWriter o:allout){ o.println(message); } } }

public void run(){ PrintWriter pw = null; try { /* * Socket提供的方法:

// // // // //

* InputStream getInputStream()

* 通过该方法获取的输入流可以读取到 * 来自远端发送过来的数据 */

InputStream in = socket.getInputStream();

InputStreamReader isr = new InputStreamReader(in,\ BufferedReader br = new BufferedReader(isr); //String scan = null; /*

* 通过Socket创建输出流,用于将消息发送给客户端 */

OutputStream out = socket.getOutputStream();

OutputStreamWriter osw = new OutputStreamWriter(out,\ pw = new PrintWriter(osw,true); /*

* 将输出流存入到共享集合中 */

synchronized (allout) { allout.add(pw); } //广播消息,该客户端上线了 sendMessage(host+\上线了\ String scan = null; /*

* 使用br.readLine()读取客户端发送过来的一行字符串时, * 由于客户端所在系统不同,那么当客户端断开连接 * 时,这里执行的结果也不同。 * 当windows的客户端断开连接时: * br.readLine方法会抛出异常; * 当Linux的客户端断开连接时: * br.readLine()方法会返回NULL; */ while((scan = br.readLine())!=null){

System.out.println(host+\客户端说:\ // pw.println(\客户端说;\ /* * 遍历allout集合,将消息发送给所有客户端 */ synchronized (allout) { for(PrintWriter o:allout){ o.println(host+\客户端说:\ sendMessage(host+\说:\ } }

搜索更多关于: 用java实现聊天室基础互动 的文档
用java实现聊天室基础互动.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c8rbhf4qirh1j03v4iv5u208bi780fr00a35_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top