1、服务器端程序

package com.test3;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*; import javax.swing.*; public class MyServer3 extends JFrame implements ActionListener{ /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new MyServer3();
} JTextArea jta = null;
JTextField jtf = null;
JButton sendBtn = null;
JPanel jp = null;
JScrollPane jsp = null;
//把信息发给客户端的对象
PrintWriter pw = null; public MyServer3()
{
//
jta = new JTextArea();
jtf = new JTextField(20);
sendBtn = new JButton("send");
sendBtn.addActionListener(this);
sendBtn.setActionCommand("send");
jsp = new JScrollPane(jta); jp = new JPanel();
jp.add(jtf);
jp.add(sendBtn); this.add(jsp,BorderLayout.CENTER);
this.add(jp,BorderLayout.SOUTH); this.setSize(400, 300);
this.setTitle("QQ简易聊天-服务器端");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setResizable(false); try {
//服务器监听
ServerSocket ss = new ServerSocket(9988);
//等待客户端连接
Socket s = ss.accept(); BufferedReader br = new BufferedReader
(new InputStreamReader(s.getInputStream())); pw = new PrintWriter(s.getOutputStream(),true);
//读取从客户端发来的信息
while(true) {
String info = br.readLine();
jta.append("client "+getTime()+"\r\n"+info+"\r\n");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand().equals("send")) {
//把服务器在jtf写的内容发送给客户端
String info = jtf.getText();
jta.append("server "+getTime()+"\r\n"+info+"\r\n");
pw.println(info);
//清空发送框内容
jtf.setText("");
}
} //获取系统时间
public String getTime()
{
Calendar c = Calendar.getInstance();//可以对每个时间域单独修改
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
return hour+":"+ minute+":"+second;
} }

2、客户端程序

package com.test3;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*; import javax.swing.*; public class MyClient3 extends JFrame implements ActionListener{ /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new MyClient3();
} JTextArea jta = null;
JTextField jtf = null;
JButton sendBtn = null;
JPanel jp = null;
JScrollPane jsp = null; PrintWriter pw = null; public MyClient3()
{
//
jta = new JTextArea();
jtf = new JTextField(20);
sendBtn = new JButton("send");
sendBtn.addActionListener(this);
sendBtn.setActionCommand("send");
jsp = new JScrollPane(jta); jp = new JPanel();
jp.add(jtf);
jp.add(sendBtn); this.add(jsp,BorderLayout.CENTER);
this.add(jp,BorderLayout.SOUTH); this.setSize(400, 300);
this.setTitle("QQ简易聊天-客户端");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setResizable(false); try {
Socket s = new Socket("127.0.0.1",9988);
BufferedReader br = new BufferedReader
(new InputStreamReader(s.getInputStream()));
pw = new PrintWriter(s.getOutputStream(),true);
while(true) {
//不停的读取服务器端发来的信息
String info = br.readLine();
jta.append("server "+getTime()+"\r\n"+info+"\r\n");
}
} catch (Exception e) {
// TODO: handle exception
}
} @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand().equals("send")) {
String info = jtf.getText();
//把客户端发送的信息显示到jta
jta.append("client "+getTime()+"\r\n"+info+"\r\n");
pw.println(info);
jtf.setText("");
}
} //获取系统时间
public String getTime()
{
Calendar c = Calendar.getInstance();//可以对每个时间域单独修改
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
return hour+":"+ minute+":"+second;
} }

3、演示





java+socket 简易聊天工具的更多相关文章

  1. Java实现简易聊天室

    Java实现简易聊天室 在学习<Java从入门到精通>这本书,网络通信,基于TCP实现的简易聊天室,我这里对书中的代码略做了修改,做个记录. 这里先放一下运行效果图,代码放在最后. 运行效 ...

  2. RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增企业通(内部简易聊天工具)

    RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本 新增企业通(内部简易聊天工具) RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用 ...

  3. java Socket多线程聊天程序

    参考JAVA 通过 Socket 实现 TCP 编程 参考java Socket多线程聊天程序(适合初学者) 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包 ...

  4. Python简易聊天工具-基于异步Socket通信

    继续学习Python中,最近看书<Python基础教程>中的虚拟茶话会项目,觉得很有意思,自己敲了一遍,受益匪浅,同时记录一下. 主要用到异步socket服务客户端和服务器模块asynco ...

  5. [置顶] Chat Room:基于JAVA Socket的聊天室设计

    d0304 更新功能实现 d0312 更新部分图片&UI设计部分 d0318 更新功能实现 d1222 实现添加好友功能.实现注册功能.修改大量BUG github:https://githu ...

  6. java socket编程--聊天小案例

    很久以前写过socket聊天室,都快忘完了,心血来潮又重新写一遍. 服务器端: package com.fancy; import java.io.BufferedReader; import jav ...

  7. java Socket Udp聊天

    import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import jav ...

  8. Java Socket 多线程聊天室

    本来这次作业我是想搞个图形界面的,然而现实情况是我把题意理解错了,于是乎失去了最初的兴致,还是把程序变成了功能正确但是“UI”不友好的console了,但是不管怎么样,前期的图形界面的开发还是很有收获 ...

  9. c# TcpClient简易聊天工具

    说明: TcpClient 链接是一个比较安全稳定的链接,作为聊天或者是数据稳定传输,是比较合适的,下面的代码测试过,如果你吧他放在公网服务器上,也是可以用的 using System; using ...

随机推荐

  1. windows server 2008 域控安装

    windows server 2008 域控安装:1.dns安装,安装过程会提示.net frame 3.51安装 3.域控安装 原文:地址 http://wenku.baidu.com/link?u ...

  2. 用SNMP实现对大型网络的轻松管理!

     原文来自:http://guojiping.blog.51cto.com/5635432/985885 一.原理介绍: SNMP简介   目前网络中用得最广泛的网络管理协议是SNMP(Simple ...

  3. C++实现通讯信息管理系统

    通讯信息管理系统 可以实现通讯信息的增加,浏览,删除,修改,查询,保存和读取功能.该系统还限制了通讯信息的条数(limit变量来限制) 文件放置结构: 具体实现代码如下: #include<io ...

  4. MongoDB 简介及安装

    什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用提供 ...

  5. C++对析构函数的误解

    C++析构前言 析构函数在什么时候会自动被调用,在什么时候需要手动来调用,真不好意思说偶学过C++…今日特此拨乱反正. C++析构误解正文 对象在构造的时候系统会分配内存资源,对一些数据成员进行初始化 ...

  6. 关于Unity中的帧动画组件的编写

    一.帧动画 1: 美术准备好一个连续动作的离散图片;2: 程序在准确的时间来切换这个图片;3: 优点: 简单,速度快; 缺点:资源占用相对过大; 二.frame_anim组件编写 1: 代码里面强制要 ...

  7. 如今在 Internet 上流传的“真正”的程序员据说是这样的

    如今在 Internet 上流传的“真正”的程序员据说是这样的: (1) 真正的程序员没有进度表,只有讨好领导的马屁精才有进度表,真正的程序员会让 领导提心吊胆. (2) 真正的程序员不写使用说明书, ...

  8. (转)live555从RTSP服务器读取数据到使用接收到的数据流程分析

    本文在linux环境下编译live555工程,并用cgdb调试工具对live555工程中的testProgs目录下的openRTSP的执行过程进行了跟踪分析,直到将从socket端读取视频数据并保存为 ...

  9. perl 脚本将phred33 转换为phred64

    今天用fastx_tookit 时遇到问题, 我的fastq 文件的碱基质量值格式为phred33, 而fastq_tookit 默认碱基质量值的格式为phred64, 所以报错了,提示我的fastq ...

  10. html dom基本操作

    //div出滚动条: <div id="discussion" style="height:500px;overflow:auto;"></d ...