/*=============服务端================*/

/**
* 服务器程序 在9999端口监听
* 可以通过控制台输入来回应客户端
* @author xiaoluo
* @qq 3087438119
*/

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;
import javax.swing.*;

public class MyServer1 extends JFrame implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
JTextArea jta = null;
JTextField jtf = null;
JButton jb = null;
JPanel jpl= null;
JScrollPane jsp = null;
//把信息发给客户端的对象
PrintWriter pw =null;
public static void main(String [] args){
MyServer1 ms = new MyServer1();
}
public MyServer1(){
jta = new JTextArea();
jtf = new JTextField(20);
jb= new JButton("发送");
jb.addActionListener(this);
jpl = new JPanel();
jsp = new JScrollPane(jta);
jpl.add(jtf);
//jpl.add(jta);
jpl.add(jb);
this.add(jsp,"Center");
this.add(jpl,"South");
this.setTitle("和佳客服");
this.setSize(400,300);
this.setVisible(true);
//服务器监听
try {
ServerSocket ss= new ServerSocket(9988);
//等待客户端连接
Socket s = ss.accept();
//读取客户端发来的信息
InputStreamReader isr = new InputStreamReader(s.getInputStream());
BufferedReader brd = new BufferedReader(isr);
pw = new PrintWriter(s.getOutputStream(),true);
while(true){
//读取客户端信息
String info = brd.readLine();
//把客户端信息写到信息栏
jta.append("客户端:"+info+"\r\n");
}
} catch (IOException e) {
e.printStackTrace();
}
}

@Override
public void actionPerformed(ActionEvent e) {
//如果用户按下发送信息按钮
if(e.getSource()==jb){
//把服务器在框里写内容发送给客户端
String info = jtf.getText();
jta.append("服务端:"+info+"\r\n");
pw.println(info);//发送
jtf.setText("");//清空输入框
}
}

}

/*===============客户端====================*/

/**
* 客户端
* @author xiaoluo
* @qq 3087438119
*/

import java.io.*;
import java.net.*;
import javax.swing.*;

public class MyClient1 extends JFrame implements ActionListener{

JTextArea jta = null;
JTextField jtf = null;
JButton jb = null;
JPanel jpl= null;
JScrollPane jsp = null;
//把信息发给客户端的对象
PrintWriter pw =null;


public static void main(String [] args){
MyClient1 mc = new MyClient1();
}

public MyClient1(){
jta = new JTextArea();
jtf = new JTextField(20);
jb= new JButton("发送");
jb.addActionListener(this);
jpl = new JPanel();
jsp = new JScrollPane(jta);
jpl.add(jtf);
//jpl.add(jta);
jpl.add(jb);
this.add(jsp,"Center");
this.add(jpl,"South");
this.setTitle("客户端");
this.setSize(400,300);
this.setVisible(true);

try {
Socket s = new Socket("127.0.0.1",9988);
InputStreamReader isr = new InputStreamReader(s.getInputStream());
BufferedReader br = new BufferedReader(isr);

pw = new PrintWriter(s.getOutputStream(),true);

while(true){
//不停地读取从服务器端发来的信息
String info = br.readLine();
jta.append("服务端:"+info+"\r\n");



}

} catch (UnknownHostException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}


}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//如果用户按下发送信息按钮
if(e.getSource()==jb){
//把服务器在框里写内容发送给客户端
String info = jtf.getText();
jta.append("客户端:"+info+"\r\n");
pw.println(info);//发送
jtf.setText("");//清空输入框
}
}
}

java基于socket的简单聊天系统的更多相关文章

  1. C#基于Socket的简单聊天室实践

    序:实现一个基于Socket的简易的聊天室,实现的思路如下: 程序的结构:多个客户端+一个服务端,客户端都是向服务端发送消息,然后服务端转发给所有的客户端,这样形成一个简单的聊天室功能. 实现的细节: ...

  2. Java基于Socket文件传输示例(转)

    最近需要进行网络传输大文件,于是对基于socket的文件传输作了一个初步的了解.在一位网友提供的程序基础上,俺进行了一些加工,采用了缓冲输入/输出流来包装输出流,再采用数据输入/输出输出流进行包装,加 ...

  3. Java基于Socket文件传输示例

    http://www.blogjava.net/sterning/archive/2007/10/13/152508.html 最近需要进行网络传输大文件,于是对基于socket的文件传输作了一个初步 ...

  4. Java的Socket通信简单实例

    服务端 package testlxd; import java.io.BufferedReader; import java.io.IOException; import java.io.Input ...

  5. java基于socket的网络通信,实现一个服务端多个客户端的群聊,传输文件功能,界面使用Swing

    最近在复习java的io流及网络编程.但复习写那些样板程序总是乏味的.便准备写个项目来巩固.想来想去还是聊天项目比较好玩.如果日后完成的比较好自己也可以用(哈哈哈).并且自己后面也要继续巩固java多 ...

  6. java基于socket公共聊天室的实现

    项目:一个公共聊天室功能的实现,实现了登录聊天,保存聊天记录等功能. 一.实现代码 1.客户端 ChatClient.java import java.io.BufferedReader; impor ...

  7. 阻塞队列 - java基于链表的简单实现

    1.阻塞队列的原理 阻塞队列与普通队列的区别在于:阻塞队列为空时,从队列中获取元素的操作将会被阻塞,当队列为满时,往队列里添加元素的操作会被阻塞. 试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其 ...

  8. C 基于socket实现简单的文件传输

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAicAAAA5CAIAAABicRxIAAAgAElEQVR4nOy9Z5NVV5om+rzL773POW

  9. 基于socket的简单p2p聊天项目

    https://blog.csdn.net/Jacky_Can/article/details/74984822 https://blog.csdn.net/qq_20889581/article/d ...

随机推荐

  1. 敏捷遇上UML-需求分析及软件设计最佳实践(郑州站 2014-6-7)

      邀请函: 尊敬的阁下:我们将在郑州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实 ...

  2. SQL SERVER如何通过SQL语句获服务器硬件和系统信息

    在SQL SERVER中如何通过SQL语句获取服务器硬件和系统信息呢?下面介绍一下如何通过SQL语句获取处理器(CPU).内存(Memory).磁盘(Disk)以及操作系统相关信息.如有不足和遗漏,敬 ...

  3. 【转】详细分析Java中断机制

    原文地址:http://www.infoq.com/cn/articles/java-interrupt-mechanism 1. 引言 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制 ...

  4. UDT中epoll对CLOSE状态的处理

    epoll_wait()返回可用uid时,对uid取状态,本该是BROKEN的,却取到CLOSED,然而,不能像处理BROKEN事件那样处理CLOSED事件,这样移除不了CLOSED事件,于是epol ...

  5. Object.observe将不加入到ES7

    先请看 Object.observe 的 API Object.observe(obj, callback[, acceptList]) 它用来监听对象的变化,当给该对象添加属性,修改属性时都会被依次 ...

  6. The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

    今天项目中报了如下错误 The last packet sent successfully to the server was 0 milliseconds ago. The driver has n ...

  7. Eclipse下还原删除的文件

    做项目的时候,不小心把Eclipse下的么个文件删除了,虽然有svn但是最新修改的代码没有提交,怎么办,在网上查了下,eclipse是可以还原删除文件的.具体做法如下所示 恢复删除的文件 1 在项目上 ...

  8. Nginx中的一些匹配顺序

    Nginx中经常需要做各种配置,总结如下: 1.server_name配置 nginx中的server_name指令主要用于配置基于名称虚拟主机,同一个Nginx虚拟主机中,可以绑定多个server_ ...

  9. AngularJS笔记---路由视图

    最近有同事提到过关于ng-view的使用, 其实自己也不懂了,由于最近一直在做AngularJs的Rearch,所以就看了一些关于ng-view的国外博客. 做过ASP.NET MVC4的都知道, 我 ...

  10. 简单的词法分析和语法分析(C++实现,CodeBlocks+GCC编译)

    说明: 分析的语言是SNL语言,详见<编译程序的设计与实现>( 刘磊.金英.张晶.张荷花.单郸编著) 词法分析就是实现了词法分析的自动机 语法分析使用递归下降法 运行结果: 词法分析 得到 ...