java c s聊天程序_java----------C/S编程-----简单聊天程序
一、服务器端代码
package org.clentserver;
import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.net.Socket;
import java.net.ServerSocket;
public class csDemo01 extends JFrame implements ActionListener
{
ServerSocket server;//服务器端套接字
Socket theClient;//与客户端通信的套接字
boolean done;//通信是否结束
JButton sent;//发送按钮
JTextArea chatContent;//聊天内容区
JTextField sentence;//聊天信息栏
DataInputStream in = null;//来自客户端的输入流
DataOutputStream out = null;//发送到客户端的输出流
public csDemo01()
{
buildGUI("聊天室----服务器端");
try
{
server = new ServerSocket(8888);//创建服务器套接字对象
}
catch (IOException e)
{
System.out.println(e);
}
while (true)
{
try
{
theClient = server.accept();
out = new DataOutputStream(theClient.getOutputStream());
in = new DataInputStream(theClient.getInputStream());
done = true;
String line = null;
while(done)
{
while((line = in.readUTF())!=null)
{
chatContent.append("对方:"+line+"\n");
}
in.close();
out.close();
theClient.close();
}
}
catch (Exception e1)
{
chatContent.append("对方("+theClient.getInetAddress()+")已经离开聊天室");
}
}
}
public void buildGUI(String title)//构造图形界面
{
this.setTitle(title);
this.setSize(400,300);
Container container = this.getContentPane();
container.setLayout(new BorderLayout());
JScrollPane centerPane = new JScrollPane();
chatContent = new JTextArea();
centerPane.setViewportView(chatContent);
container.add(centerPane,BorderLayout.CENTER);
chatContent.setEditable(false);
JPanel bottomPanel = new JPanel();
sentence = new JTextField(20);
sent = new JButton("发送");
bottomPanel.add(new JLabel("聊天信息"));
bottomPanel.add(sentence);
bottomPanel.add(sent);
container.add(bottomPanel,BorderLayout.SOUTH);
sent.addActionListener(this);
sentence.addActionListener(this);
this.setVisible(true);
this.addWindowListener(new WindowAdapter()//匿名内部内监听窗口关闭操作
{
public void windowClosing(WindowEvent e)
{
try
{
out.writeUTF("bye");
}
catch (IOException e2)
{
System.out.println("服务器端窗口关闭。。。");
}
finally
{
System.exit(0);
}
}
});
}
public void actionPerformed(ActionEvent e)
{
String str = sentence.getText();//获取聊天信息栏的聊天内容
if(str!=null&&!str.equals(""))//如果聊天内容不为空,则发送信息
{
chatContent.append("本人:"+str+"\n");
try
{
out.writeUTF(sentence.getText());
}
catch (Exception e3)
{
chatContent.append("客户端不存在...\n");
}
}
else
{
chatContent.append("聊天信息不能为空\n");
}
sentence.setText("");//清空聊天信息栏的内容
}
public static void main(String[] args)
{
new csDemo01();
}
}
二、
客户端代码
package org.clentserver;
import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.net.Socket;
public class OfcsDemo02 extends JFrame implements ActionListener
{
Socket client;
boolean done;
JButton sent;
JTextArea chatContent;
JTextField sentence;
DataInputStream in = null;
DataOutputStream out = null;
public OfcsDemo02()
{
buildGUI("聊天室----客户机端");
try
{
client = new Socket("localhost",8888);
out = new DataOutputStream(client.getOutputStream());
in = new DataInputStream(client.getInputStream());
done = false;
String line = null;
while(!done)
{
while((line = in.readUTF())!=null)
{
chatContent.append("对方:"+line+"\n");
if(line.equals("bte"))
{
String msg = "服务器发来结束通信命令!\n";
msg += "系统将在您确认此对话框的8秒钟后关闭,\n";
JOptionPane.showMessageDialog(this, msg);
Thread.sleep(8000);
done = true;
break;
}
}
in.close();
out.close();
System.exit(0);
}
}
catch (Exception e)
{
chatContent.append("服务器已关闭。。。\n");
}
}
public void buildGUI(String title)
{
this.setTitle(title);
this.setSize(400,300);
Container container = this.getContentPane();
container.setLayout(new BorderLayout());
JScrollPane centerPane = new JScrollPane();
chatContent = new JTextArea();
centerPane.setViewportView(chatContent);
container.add(centerPane,BorderLayout.CENTER);
chatContent.setEditable(false);
JPanel bottomPanel = new JPanel();
sentence = new JTextField(20);
sent = new JButton("发送");
bottomPanel.add(new JLabel("聊天信息"));
bottomPanel.add(sentence);
bottomPanel.add(sent);
container.add(bottomPanel,BorderLayout.SOUTH);
sent.addActionListener(this);
sentence.addActionListener(this);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e)
{
String str = sentence.getText();
if(str!=null&&!str.equals(""))
{
chatContent.append("本人:"+str+"\n");
try
{
out.writeUTF(sentence.getText());
}
catch (Exception e3)
{
chatContent.append("服务器没有启动...\n");
}
}
else
{
chatContent.append("聊天信息不能为空\n");
}
sentence.setText("");
}
public static void main(String[] args)
{
new OfcsDemo02();
}
}
三、
效果展示
java c s聊天程序_java----------C/S编程-----简单聊天程序相关推荐
- java socket接口文档_Java进阶 - 网络编程、Socket、函数式接口、常用的函数式接口...
1.网络通信协议 网络通信协议:通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信.这就好比在道路中行驶的汽车一定要遵守交通规则一样,协议中对数据的传输格式.传输速率.传输步骤 ...
- java 网络编程简单聊天_网络编程之 TCP 实现简单聊天
网络编程之 TCP 实现简单聊天 客户端 1.连接服务器 Socket 2.发送消息 package lesson02;import java.io.IOException;import java.i ...
- java 网络io详解_Java网络socket编程详解
或许有点长 但是一步步教你 我想你也愿意看7.2面向套接字编程 我们已经通过了解Socket的接口,知其所以然,下面我们就将通过具体的案例,来熟悉Socket的具体工作方式7.2.1使用套接字实现基于 ...
- java入门篇(一)如何编写一个简单的程序
最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...
- java ee实例详解_Java EE企业级编程开发实例详解
第1章 javaee开发基础 9 q5 @! t4 \9 t. }: K# R1 }1.1 javaee6简介 / p* T1 g! F K3 ^4 j3 |1.1.1学习 javaee的意义 5 ...
- ubuntu下使用vscode开发golang程序,从控制台到简单web程序
最近项目要使用go语言开发一个web程序,由于是第一次使用go开发,就将开发过程中的点滴做个记录吧. 目录 1.安装go 1.1 安装 1.2 配置go语言环境变量 2.vscode配置go开发 2. ...
- linux编写运行shell程序,Linux的Shell编程运行Shell程序的方法有哪些呢?
用户可以用任何编辑程序来编写Shell程序.因为Shell程序是解释执行的,所以不需要编译成目的程序.按照Shell编程的惯例,以 bash为例,程序的第一行一般为"#!/bin/bash& ...
- python socket 网络聊天室_Python基于Socket实现简单聊天室
本文实例为大家分享了Python基于Socket实现简单聊天室,供大家参考,具体内容如下 服务端 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Ti ...
- java c s聊天程序_Java建立C/S 模式聊天室服务器和客户端
时间:2018-12-01 概述:聊天室 服务器 客户端 在网络上经常进各种聊天室,本例通过编程实现了C/S 模式的聊天室服务器和客户端.实现方法:ChatServer 类实现了一个聊天室服务器端, ...
- java开发websocket聊天室_java实现基于websocket的聊天室
[实例简介] java实现基于websocket的聊天室 [实例截图] [核心代码] chatMavenWebapp └── chat Maven Webapp ├── pom.xml ├── src ...
最新文章
- 如何使用jsp自定义标签 JspTag 使用入门
- 微软发布了云Bot-as-a-Service平台
- sniffer使用查网络故障
- 吴恩达深度学习课程deeplearning.ai课程作业:Class 2 Week 1 1.Initialization
- 6a标准 api_【阀门标准】API SPEC 6A CHINESE-2010中文版.pdf
- 华为双11发 20 亿奖金!?
- 计算机word图表布布局在哪,新版Word中的图表布局功能详解
- 建立网站的全套流程与详细解释(转载)
- 滴滴,一个连接者的责任边界
- python批量将文件夹下所有图片中一种颜色改变为随机颜色
- 表白网页在线制作-我要表白网-最浪漫的表白网页在线生成网站
- 逻辑回归(logistics regression)
- CodeForces 1293A——ConneR and the A.R.C. Markland-N【签到题】
- IT视频课程集(包含各类Oracle、DB2、Linux、Mysql、Nosql、Hadoop、BI、云计算、编程开发、网络、大数据、虚拟化
- alt tab无法切换窗口
- gitlab服务器代码存储位置,gitlab仓库存储位置的修改方法
- 全国计算机四级之网络工程师知识点(四)
- Shell语言(一)
- 基于深度学习的目标检测算法综述
- 计算机职业生涯规划范文网,计算机职业生涯规划书范文
热门文章
- 3篇SCI定A类博士!直聘副教授七级!有偿70㎡住房+30万安家费+25万科启
- 乐动体育推荐:9款最佳编程字体
- 微信小程序使用图标库
- 高清银行LOGO图片整合分享
- dbf转成excel_怎么样把dbf文件转换成excel/dbf转excle
- 《Python黑帽子》python3代码实现(第五章)
- git/gitflow git工作流
- LabView学习笔记——简易入门AND初级实战项目(计算器)
- Jetson TX1开发笔记(三):开发利器-Nsight Eclipse Edition
- c语言程序设计必备单词,(完整版)C语言编程必背单词.docx