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. nfs服务器与客户端配置

    服务器端(PC)配置 ubuntu提供两种NFS服务器:一种以内核模块形式提供,nfs-kernel-server:一种以用户空间程序形式提供,nfs-user-server;两种择一即可.1. 安装 ...

  2. C++实现八皇后问题

    C++实现八皇后问题 #include <iostream> using std::cout; using std::endl; #include <iomanip> usin ...

  3. vmware克隆Centos6.4虚拟机网卡无法启动问题

    vmware克隆Centos6.4虚拟机网卡无法启动问题                 2014-02-26 16:44:54 标签:老男孩培训 vmware克隆问题 网卡无法启动          ...

  4. LINQ操作符三:限制操作符

    where是限制操作符,它将过滤标准应用在序列上,按照提供的逻辑对序列中的数据进行过滤. where操作符不启动查询的执行.当开始对序列进行遍历时才开始执行,此时过滤条件将被应用到查询中. 示例: / ...

  5. ubuntu workbench

    先安装环境 sudo apt-get install python-paramikosudo apt-get install python-pysqlite2 当然mysql要装好 还要装 sudo ...

  6. 公司内网成功实现WSUS在不连外网的条件下更新补丁包!

    微软的WSUS的命令行很有帮助! 为了便于管理,WSUS服务器中提供了一个命令行工具WSUSUtil.exe,你可以使用它完成一些在WSUS管理控制台中不能进行的任务,例如导入导出数据等等.WSUSU ...

  7. font-face自定义字体

    做网站的时候,有时候会遇到某些字体系统里面没有自带.可能更多的时候我们会选择以图替文的方式来做.用图片的话不利于图片的放大缩小,更好的办法是我们可以自定义字体. 当然,在实际运用中我们需要权衡一下自定 ...

  8. [oracle] oracle的三种密码验证机制以及在windows和linux下的不同启动过程

    oracle数据库的密码验证机制: ① 操作系统验证 拥有SYSDBA和SYSOPER的用户用该方式验证此时数据库无需启动,也无需开启监听和实例服务. 要求:本地组ora_dba中有该操作系统的登录用 ...

  9. 同一页面中引入多个JS库产生的冲突解决方案(转)

    发生JS库冲突的主要原因:与jQuery库一样,许多JS库都使用‘$’符号作为其代号.因此在一个页面中引入多个JS库,并且使用‘$’作为代号时,程序不能识别其代表哪个库(这个是我自己的解释,但更深的原 ...

  10. Json.net 时间格式处理

    json.net转json时生成的时间格式是这种 2015-11-14T06:59:59+08:00 格式化为这种2015-11-14 后台代码: IsoDateTimeConverter timeF ...