客户端:

package QQ;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket; /**
* Created by hu on 2015/11/8.
*/
//QQ类似聊天程序的客户端
public class Client extends JFrame {
static JTextArea area;
JTextField field;
JButton button;
static PrintWriter writer;
public Client() {
this.setTitle("客户端");
this.setSize(400,500);
area=new JTextArea(25,30);
area.setEditable(false);
field=new JTextField(20);
button=new JButton("提交");
JScrollPane sp=new JScrollPane(area);
JPanel panel=new JPanel();
this.add(sp, BorderLayout.CENTER);
panel.add(field);
panel.add(button);
this.add(panel,BorderLayout.SOUTH);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text=field.getText();
writer.println(text);
area.append("me:"+text+"\n");
field.setText("");
}
});
}
public static void main(String[] args)throws Exception{
Socket socket=new Socket("127.0.0.1",8899);
Client client=new Client();
OutputStream out=socket.getOutputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer=new PrintWriter(out,true); client.addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) { } @Override
public void windowClosing(WindowEvent e) {
System.out.println("closing");
try {
socket.shutdownInput();
socket.shutdownOutput();
socket.close();
writer.close();
reader.close();
}catch (Exception exception){
exception.printStackTrace();
} } @Override
public void windowClosed(WindowEvent e) {
System.out.println("closed"); } @Override
public void windowIconified(WindowEvent e) { } @Override
public void windowDeiconified(WindowEvent e) { } @Override
public void windowActivated(WindowEvent e) { } @Override
public void windowDeactivated(WindowEvent e) { }
});
while (true){
try{
String line=reader.readLine();
area.append("服务器:"+line+"\n");
}catch (Exception exception){
System.out.println("客户端程序已经关闭!");
break;
}
}
}
}
服务端
package QQ;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Created by hu on 2015/11/8.
*/
/*
* qq类似聊天程序的服务端
* */
public class Server extends JFrame{
static JTextArea area;
JTextField field;
JButton button;
static PrintStream writer;
public Server(){
//设置窗口的大小和标题
this.setTitle("服务器");
this.setSize(400,500);
//设置文本区域的大小并且设置为不可编辑
area=new JTextArea(25,30);
area.setEditable(false);
//设置文本输入框的大小
field=new JTextField(20);
//设置按钮的
button=new JButton("提交");
/*
* JPanel默认布局的是FlowLayout
* 可以new的时候就定义成其他布局:
* JPanel p=new JPanel(new GridLayout(2,1));//两行一列
* JPanel p=new JPanel(new BorderLayout());
* */
JPanel panel=new JPanel();
JScrollPane sp=new JScrollPane(area);
this.add(sp, BorderLayout.CENTER);
panel.add(field);
panel.add(button);
this.add(panel,BorderLayout.SOUTH);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//为按钮添加事件
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text=field.getText();
writer.println(text);
area.append("seven_hu:"+text+"\n");
field.setText("");
}
});
}
public static void main(String[] args)throws Exception{
Server server=new Server();
ServerSocket serverSocket=new ServerSocket(8899);
System.out.println("Starting listening...");
while (true){
Socket socket=serverSocket.accept();
//获取客户端主机名
InetAddress address=socket.getInetAddress();
String name=address.getLocalHost().getHostName();
System.out.println(name+"已连接");
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer=new PrintStream(socket.getOutputStream(),true);
String line=null;
line=reader.readLine();
if(line!=null){
area.append("client:"+line+"\n");
}
}
}
}
 

java网络编程(三):一个类似QQ的聊天程序的更多相关文章

  1. Java网络编程三--基于TCP协议的网络编程

    ServerSocket对象用于监听来自客户端的Socket连接,如果没有连接,它将一直处于等待状体 Socket accept():如果接收到客户端的连接请求,该方法返回一个与客户端对应Socket ...

  2. java网络编程三次握手四次挥手

    第一次握手:client设置syn=1,随机产生一个序列号seq=x,将数据包发送到server.client进入syn_send状态, 等待server确认. 第二次握手:server查看clien ...

  3. 20145215实验五 Java网络编程及安全

    20145215实验五 Java网络编程及安全 实验内容 掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验步骤 本次实验我的结对编程对象是20145208蔡野,我负责编写客 ...

  4. 20145337实验五Java网络编程及安全

    20145337实验五Java网络编程及安全 实验内容 掌握Socket程序的编写 掌握密码技术的使用 设计安全传输系统 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器 ...

  5. 20145122《 Java网络编程》实验五实验报告

    实验名称 Java网络编程 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 结对小伙伴 20145120黄玄曦 博客地址:http://www.cnblo ...

  6. 20145327实验五 Java网络编程

    实验五 Java网络编程 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器, ...

  7. Java网络编程:QQ邮件发送客户端程序设计

    目录 一.目标介绍 1.认识SMTP(邮件传输协议) 2.POP3(邮件接收协议) 二.基于Base64编码邮箱及授权码 1.开通QQ邮箱SMTP/POP3服务 2.Java编写BASE64编码程序 ...

  8. java 网络编程(三)---TCP的基础级示例

    下面是TCP java网络编程的基础示例: tcp传输:客户端建立过程的思路:1.创建TCP客户端的Socket服务,使用的是socket对象,建议在创建的过程中,就明确了目的地和要连接的主机2.如果 ...

  9. JAVA网络编程【转】出处不详

    网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...

随机推荐

  1. GNU汇编 函数调用的例子

    .text .global  _start _start: mov r1,#2 cmp  r1,#1 bl func1    @bl能保存下一条指令的位置到lr寄存器里面,b不能 mov  r1, # ...

  2. Mysql关闭和修改密码

    数据库的关闭方法: 1.优雅的关闭数据库的方法:mysqladmin -uroot -p123456 shutdown 2.脚本关闭:/etc/init.d/mysqld stop 3.使用kill信 ...

  3. 绘制弧形:imagearc() 说明:三点钟的位置是起点(0度

    <?php //1. 绘制图像资源(创建一个画布) $image = imagecreatetruecolor(500, 300); //2. 先分配一个绿色 $green = imagecol ...

  4. 【linux】CPU,内存对网站的影响

    如果读写非常多,建议内存大点 如果涉及到的计算非常多,那就升级CPU

  5. Python基础:输入与输出(I/O)

    来做一个NLP任务 步骤为: 1.读取文件: 2.去除所有标点符号和换行符,并把所有大写变成小写: 3.合并相同的词,统计每个词出现的频率,并按照词频从大到小排序: 4.将结果按行输出到文件 out. ...

  6. linux下安装VMware出错:Gtk-Message: Failed to load module "canberra-gtk-module"解决方法

    最近又有兴趣在linux下搭建个虚拟机,于是去找了个VMWorkstation,安装的过程中报了两个错误 Gtk-Message: Failed to load module "pk-gtk ...

  7. German Collegiate Programming Contest 2018​ C. Coolest Ski Route

    John loves winter. Every skiing season he goes heli-skiing with his friends. To do so, they rent a h ...

  8. 命令执行sql

    从外网把数据库用导出脚本的方式导出来了,280M的样子,导是导出来了,但是在本机执行sql脚本的时候,直接就是out of memory,之前执行60M的脚本没出过这问题,直接双击打开.sql脚本文件 ...

  9. CodeForces 768E Game of Stones 打表找规律

    题意: 在经典Nim博弈的基础上增加了新的限制:如果从这堆石子中移走\(x\)个石子,那么之后就不能再从这堆移走\(x\)个. 分析: 因为之前的操作会对后面的转移有影响,所以在保存状态时还要记录哪些 ...

  10. Asp.net自定义控件开发任我行(6)-嵌入资源下

    摘要 上一章,我们讲了嵌入.css文件,这一章,我们来讲一下嵌入.js文件,也顺带一个嵌入Image文件 内容 我们前面的几章,一运行,下拉框就显示出来了,但是DropDwonList的下拉框是被隐藏 ...