java c 客户端_java基于C/S模式实现聊天程序(客户端)
经过这几天对java的学习,用java做了这个计算机网络的课程设计,基于C/S模式的简单聊天程序,此篇文章介绍一些客户端的一些东西。
先讲一讲此聊天程序的基本原理,客户端发送消息至服务器,服务器收到消息之后将其转发给连接服务器的所有客户端,来自客户端的消息中包含发件人的名字。
客户端的主要功能是发送消息和接收消息,客户端设置好了端口和服务器地址,并创立客户端自己的套接字,用作和服务器通信的一个标识。布局就不多说了,主要说说监视器和两个重要的线程:发送和接收。
监视器中,登录按钮触发的功能是设置用户名,并且建立和服务器的连接,同时还要创建接收线程,并使其开始运行。
下面说一说,发送和接收的线程:发送线程是建立数据输出流,将想要文本输入区中的消息以UTF字符串的形式写入到数据流中,并且在发送成功后清空输入框。并且该线程由“发送”按钮触发。
接收线程是在登录之后就建立的,线程中建立输入流,并且读出流中的UTF字符串,将其显示到文本展示区,就完成了信息的接收。
客户端大致的功能和组成就是这些了,下一篇我将讲一下有关服务器的东西。
界面展示:
package client;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
public class Client extends JFrame {
Socket clientsocket = null;
DataInputStream in = null;
DataOutputStream out = null;
JTextArea inputText;
String SerAddress = "192.168.1.100";
int SendPort = 8888;
JTextField NickName;
JTextArea textShow;
JButton button, setbutton;
public Client() { // 构造函数,创建一个布局并初始化
init();
setVisible(true);
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
setBounds(480, 160, 340, 460);
setTitle("好好学习天天向上聊天室");
setResizable(false);
}
void init() { // 初始化函数,设置布局并且设置监视器
inputText = new JTextArea(4, 29);
button = new JButton(" 发送 ");
JLabel label = new JLabel("昵称");
setbutton = new JButton(" 登录 ");
textShow = new JTextArea(15, 29);
textShow.setEditable(false);
NickName = new JTextField(10);
inputText.setBackground(new Color(45, 210, 209));
setLayout(new FlowLayout());
getContentPane().setBackground(new Color(20, 85, 237));
add(new JScrollPane(textShow));
textShow.setBackground(new Color(45, 210, 209));
setbutton.setBackground(new Color(236, 134, 21));
button.setBackground(new Color(236, 134, 21));
NickName.setBackground(new Color(45, 210, 209));
label.setForeground(new Color(243, 243, 14));
add(label);
add(NickName);
add(setbutton);
add(new JScrollPane(inputText));
add(button);
setbutton.addActionListener(new ActionListener() { //添加监视器
public void actionPerformed(ActionEvent e) {
Thread readData;
Read read = null;
try {
clientsocket = new Socket();
read = new Read();
readData = new Thread(read);
if (clientsocket.isConnected()) {
} else {
InetAddress address = InetAddress.getByName(SerAddress);
InetSocketAddress socketAddress = new InetSocketAddress(
address, SendPort);
clientsocket.connect(socketAddress);
textShow.append(new java.text.SimpleDateFormat(
"yy-MM-dd HH:mm:ss").format(new Date())
+ "\n与服务器连接成功\n已登录聊天室\n");
in = new DataInputStream(clientsocket.getInputStream());
out = new DataOutputStream(clientsocket
.getOutputStream());
read.setDataInputStream(in);
readData.start();
}
} catch (Exception e1) {
textShow.append(new java.text.SimpleDateFormat(
"yy-MM-dd HH:mm:ss").format(new Date())
+ "\n服务器连接失败\n");
}
}
});
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Send send = new Send();
Thread sendData = new Thread(send);
send.setDataOutputStream(out);
sendData.start();
}
});
addWindowListener(new WindowAdapter() { //响应关闭按钮的功能
public void windowClosing(WindowEvent e) {
int option = JOptionPane
.showConfirmDialog(null, "亲爱的你真的要离开聊天室么?",
" 好好学习,天天向上", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
if (option == JOptionPane.YES_OPTION)
System.exit(0);
}
});
} // init结束
class Read implements Runnable { //读取输入流的线程
DataInputStream in;
public void setDataInputStream(DataInputStream in) {
this.in = in;
}
public void run() {
String result;
while (true) {
try {
result = in.readUTF();
textShow.append(new java.text.SimpleDateFormat(
"yy-MM-dd HH:mm:ss").format(new Date())
+ "\n"
+ result);
} catch (IOException e) {
textShow.append(new java.text.SimpleDateFormat(
"yy-MM-dd HH:mm:ss").format(new Date())
+ "\n与服务器断开连接\n");
break;
}
}
}
}
class Send implements Runnable { // 发送消息的输出流线程
DataOutputStream out;
public void setDataOutputStream(DataOutputStream out) {
this.out = out;
}
public void run() {
String message = null;
message = NickName.getText() + ":" + inputText.getText() + "\n";
try {
out.writeUTF(message);
inputText.setText("");
} catch (Exception e2) {
textShow.append("发送失败:未连接到服务器\n");
}
}
}
public static void main(String args[]) {
Client client = new Client();
}
}
上面即是这篇文章的内容,希望对各位的学习有所启发,也希望大家多多支持学猫在线(shtml.net)。
本文来源:https://blog.csdn.net/h843653844/article/details/50412368
java c 客户端_java基于C/S模式实现聊天程序(客户端)相关推荐
- 基于DES加密的TCP聊天程序
近闻多大牛写博客已出书,虽才疏学浅,不求著书立说,但求面试官一问,答曰:吾于CSDN发表数篇博文,多热评,又选得<网络安全>一课,于图书馆觅得<网络安全高级软件编程技术>一书, ...
- java五子棋聊天功能_Java基于享元模式实现五子棋游戏功能实例详解
本文实例讲述了Java基于享元模式实现五子棋游戏功能.分享给大家供大家参考,具体如下: 一.模式定义 享元模式,以共享的方式高效地支持大量的细粒度对象.通过复用内存中已存在的对象,降低系统创建对象实例 ...
- java多人聊天室的实验任务_Java基于中介者模式实现多人聊天室功能示例
本文实例讲述了Java基于中介者模式实现多人聊天室功能.分享给大家供大家参考,具体如下: 一 模式定义 中介者模式,用一个中介对象来封装一系列对象之间的交互,使各个对象中不需要显示地引用其他对象实例, ...
- 【Java】基于Socket的C/S聊天程序
这次又是啥 一个很久以前写的能够支持C/S模式聊天的Demo,利用Java的Socket写的. 只能聊一句就下线,挺low的. 服务器端程序Server import java.io.Buffered ...
- 网络编程应用:基于UDP协议【实现聊天程序】--练习
要求: 使用UDP协议实现一个聊天程序 代码: 发送端: package UDP聊天程序;import java.io.IOException; import java.net.DatagramPac ...
- socket java 客户端_Java基于socket实现的客户端和服务端通信功能完整实例
本文实例讲述了Java基于socket实现的客户端和服务端通信功能.分享给大家供大家参考,具体如下: 以下代码参考马士兵的聊天项目,先运行ChatServer.java实现端口监听,然后再运行Chat ...
- r.java美发更改_JAVA基于MVC模式下的理发管理系统
每天记录学习,每天会有好心情.*^_^* 今天将为大家分析一个理发管理系统(该系统基于JAVA语言开发,设计过程中充分利用MVC设计模式.针对行业的管理需求,以日常管理为核心,构建集员工信息管理模块, ...
- java邮件客户端源代码,JAVA基于B/S模式下的电子邮件客户端软件,源码分享
今天将为大家分析一个电子邮件客户端软件(随着计算机网络的高速发展,人与人之间信息传输量越来越大,传输时间也越来越短.在这计算机技术和Internet广泛普及的时代,电子邮件扮演了一个非常重要的角色.通 ...
- java socket 通信协议_java 基于TCP协议的Socket编程和通信
java 基于 TCP 协议的 Socket 编程和通信 在网络通讯中,第一次主动发起通讯的程序被称作客户 端 (Client) 程序, 简称客户端, 而在第一次通讯中等待连接的 程序被称作服务器端 ...
最新文章
- 开源炫酷css轮播图 可直接引入html文件使用 含注释 jQuery插件
- HOG:从理论到OpenCV实践
- Boost库学习(0)
- C++ 方块游戏小更新
- 小程序开发代码_企业为什么要选择小程序定制开发?
- 使用Mali Graphics Debugger调优Unity程序(Killer示例)
- Spring事务总结(一) 内部调用事务失效、异常回滚
- centos 截图命令 screenshot
- hibernate.Session简介
- QConf分布式配置管理工具 QConf
- SQL语句的增删改查(详细)
- 银行相关术语及其翻译
- [Audacity][帮助手册][手册内容]认识Audacity
- [FastDFS] 文件路径M00是什么意思
- C语言鼠标病毒,鼠标也中毒Windows系统中鼠标乱动是否中了病毒
- 小程序 配置域名 业务域名_使域名成为您的业务
- 搭建redis的步骤
- 小程序onReachBottom不触发解决办法(附代码)
- 《焦元溥古典音乐入门指南》学习笔记————第一章 为什么我们还在听古典音乐?
- Axure RP 8 介绍
热门文章
- 【剑指offer】面试题33:二叉搜索树的后序遍历序列
- 查看屏幕大小_疑似“iPhone 12” 的OLED屏幕组件泄露
- python的百分号和斜杠 除_关于python:如何替换除字母,数字,正斜杠和反斜杠之外的所有字符...
- mac怎么合并两个容器_Mac怎么合并文件夹?macz不容错过的苹果mac教程分享
- UserWarning: The default mode, 'constant', will be changed to 'reflect'
- Verilog HDL设计实现m序列+选择器
- MySQL流浪记(二)—— MySQL介绍及其特性
- 小甲鱼 OllyDbg 教程系列 (十五) : 逆向注册机简单算法
- Python 模块 requests 模拟登录豆瓣 并 发表动态
- mysql 字符设置与修改