Java程序设计:Java 网络聊天室客户端

相关网络编程前两篇文章:Java程序设计:Java网络编程实验

服务端部分见上一篇文章:Java程序设计:Java网络聊天室服务端

目录

1 实验名称

2 实验目的

3 实验源代码

4 实验运行结果图

5 总结


1 实验名称

       Java 网络聊天室客户端

2 实验目的

       继续熟练掌握在eclipse中调试代码

       掌握Java面向对象思想掌握多线程在该项目中的使用

       掌握GUI编程在该项目中的使用

       掌握IO在该项目中的使用

       掌握多线程在该项目中的使用

       掌握Java 网络编程在该项目中的使用

       掌握TCP协议和Socket套接字编程在该项目中的使用

3 实验源代码

package Text01.NetworkProgrammingText;

import java.io.*;
import java.net.*;
import java.util.Scanner;

public class Client {
    private String hostname; // 服务器地址
    private int port; // 服务器端口
    private String clientName; // 客户端名称

    public Client(String hostname, int port, String clientName) {
        this.hostname = hostname;
        this.port = port;
        this.clientName = clientName;
    }

    public void start() {
        try {
            Socket socket = new Socket(hostname, port); // 连接服务器
            System.out.println("连接服务器成功!");

            BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 输入流,用于读取服务器发送的消息
            BufferedWriter output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); // 输出流,用于向服务器发送消息

            output.write(clientName + "\n"); // 输入客户端名称
            output.flush();

            Thread readThread = new Thread(new Runnable() { // 创建新线程用于读取服务器发送的消息
                @Override
                public void run() {
                    try {
                        String message;
                        while ((message = input.readLine()) != null) { // 循环读取服务器发送的消息并在控制台上显示
                            System.out.println(message);
                        }
                    } catch (IOException e) {
                        System.out.println("读取服务器消息失败: " + e.getMessage());
                    }
                }
            });
            readThread.start(); // 启动新线程

            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); // 控制台输入流
            String message = "";
            while (!message.equals("bye")) { // 循环读取用户控制台输入并发送给服务器
                message = reader.readLine();
                output.write(clientName + ": " + message + "\n");
                output.flush();
            }

            readThread.interrupt(); // 中断新线程
            input.close(); // 关闭输入流、输出流和socket连接
            output.close();
            socket.close();
        } catch (IOException e) {
            System.out.println("连接服务器失败: " + e.getMessage());
        }
    }

    public static void main(String[] args) {
        String hostname = "127.0.0.1"; // 获取服务器地址
        int port = Integer.parseInt("8080"); // 获取服务器端口号
        String clientName = "8000"; // 获取客户端名称
        Client client = new Client(hostname, port, clientName); // 创建客户端对象
        client.start(); // 启动客户端
    }
}

4 实验运行结果图

5 总结

       此次实验通过创建服务器、处理客户端请求、多线程服务器、客户端编程等一系列步骤完成了这次任务。此次实验中,使用ServerSocket类创建了一个简单的服务器,并处理了客户端连接请求;接着使用Socket类处理了客户端发送的消息,并向客户端返回相应消息;然后使用多线程服务器来处理多个客户端的连接请求,实现了并发处理功能;最终也实现了一个简单的客户端程序,并与服务器进行通信。  

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这个西瓜明明超甜却过分低调

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值