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. 【C#/WPF】图片的切割/切图/裁剪图片

    前台准备两个Image控件.上面是显示原图,下面显示切割后的效果. <StackPanel Orientation="Vertical"> <Image Widt ...

  2. C语言 · 运用结构体的排序方法

    之前遇到排序只想着最原始的方法,诸如冒泡,选择,快速排序等等,刚刚跟大牛学会了结构体的方法来排序,这样的话以后再也不用怕成绩统计.名次排序之类的题目了. 首先头文件(基于大牛的方法,本人之后做题喜欢引 ...

  3. am335x gpio 模拟 spi 驱动添加

    kernel 内 make menuconfig // make menuconfig Device Drivers ---> [*] SPI support ---> <*> ...

  4. 分别通过【buildpath】和【lib】倒入JAR包有什么不同

    我们可以通过java虚拟机的类加载器来理解.通过buildpath设置(或添加)程序使用jar包的classpath.Java虚拟机是根据Java ClassLoader(类加载器)决定如何,到那里去 ...

  5. JavaScript 深入理解作用域链

    第一步. 定义后:每个已定义函数,都有一个内在属性[scope],其对应一个对象的列表,列表中的对象仅能内部访问. 例如:建立一个全局函数A,那么A的[Scope]内部属性中只包含一个全局对象(Glo ...

  6. Yii CDbCriteria 常用方法

    一.一个sql拼装的情况 $criteria = new CDbCriteria; //函数方式 $criteria->addCondition("id=1"); //查询条 ...

  7. /etc/fstab下的挂载类型defaults默认参数

    [root@ob2 data]# cat /etc/fstab -98c0-59dbbcf8b040 / ext4 defaults UUID=e4ab7a0c-500f--bcd2-a77be0ce ...

  8. MySQL 性能优化的最佳 20+ 条经验

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...

  9. spark学习系列

    转自: http://www.cnblogs.com/magj2006/p/4316264.html spark 系列文章汇总 源码导读 spark 源码导读1 从spark启动脚本开始 spark ...

  10. C Language Study - 函数指针的使用

    函数指针的使用 1.函数指针定义 第一次使用函数指针,我是这样声明的,typedef void ( *pSimulatepks )( uint8 *prxBuf, uint8 *prxBufLen ) ...