java网络编程(三):一个类似QQ的聊天程序
客户端:
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的聊天程序的更多相关文章
- Java网络编程三--基于TCP协议的网络编程
ServerSocket对象用于监听来自客户端的Socket连接,如果没有连接,它将一直处于等待状体 Socket accept():如果接收到客户端的连接请求,该方法返回一个与客户端对应Socket ...
- java网络编程三次握手四次挥手
第一次握手:client设置syn=1,随机产生一个序列号seq=x,将数据包发送到server.client进入syn_send状态, 等待server确认. 第二次握手:server查看clien ...
- 20145215实验五 Java网络编程及安全
20145215实验五 Java网络编程及安全 实验内容 掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验步骤 本次实验我的结对编程对象是20145208蔡野,我负责编写客 ...
- 20145337实验五Java网络编程及安全
20145337实验五Java网络编程及安全 实验内容 掌握Socket程序的编写 掌握密码技术的使用 设计安全传输系统 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器 ...
- 20145122《 Java网络编程》实验五实验报告
实验名称 Java网络编程 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 结对小伙伴 20145120黄玄曦 博客地址:http://www.cnblo ...
- 20145327实验五 Java网络编程
实验五 Java网络编程 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器, ...
- Java网络编程:QQ邮件发送客户端程序设计
目录 一.目标介绍 1.认识SMTP(邮件传输协议) 2.POP3(邮件接收协议) 二.基于Base64编码邮箱及授权码 1.开通QQ邮箱SMTP/POP3服务 2.Java编写BASE64编码程序 ...
- java 网络编程(三)---TCP的基础级示例
下面是TCP java网络编程的基础示例: tcp传输:客户端建立过程的思路:1.创建TCP客户端的Socket服务,使用的是socket对象,建议在创建的过程中,就明确了目的地和要连接的主机2.如果 ...
- JAVA网络编程【转】出处不详
网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...
随机推荐
- HashMap 排序
本文章,摘抄自:2018黑马程序最新面试题汇总 已知一个 HashMap<Integer,User>集合, User 有 name(String)和 age(int)属性.请写一个方法实现 ...
- Install Jenkins 2.1.36 and openjdk 1.7.0 on centos 7
#!/bin/bash## Copyright (c) 2014-2015 Michael Dichirico (https://github.com/mdichirico)# This softwa ...
- 【PHP】根据两地经纬度计算距离
最近做一个H5活动的项目,有个要求是必须现场玩家才能参与,所以就需要计算玩家位置和活动地点的距离来判断是否在活动现场. 以下是写的一个根据经纬度计算两地距离的方法 1 function getDist ...
- python字符串处理方法
一.combine & duplicate 字符串结合和复制 字符和字符串可以用来相加来组合成一个字符串输出: 字符或字符串复制输出. 二.Extract &Slice 字符串提取和切 ...
- scrapy框架简介和基础使用
概念 为了爬取网站数据而编写的一款应用框架,出名,强大.所谓的框架其实就是一个集成了相应的功能且具有很强通用性的项目模板.(高性能的异步下载,解析,持久化……) 安装 linux mac os:pip ...
- 2015-2016 Northwestern European Regional Contest (NWERC 2015)
训练时间:2019-04-05 一场读错三个题,队友恨不得手刃了我这个坑B. A I J 简单,不写了. C - Cleaning Pipes (Gym - 101485C) 对于有公共点的管道建边, ...
- 华东交通大学2018年ACM“双基”程序设计竞赛 D
摸鱼之王MIKU酱想去埃及玩,需要一个人陪同.小新和小磊都想陪MIKU酱一起去,但名额只有一个.所以小磊和小新决定用一个小游戏来决定谁和MIKU酱出去玩. 游戏的道具是21张塔罗牌,塔罗牌分 ...
- easyui-numberbox限定仅输入数字
许多必填项都涉及到数字,比如电话号码,身份证号这些要求用户在输入时只能输入数字.Easyui提供了数字框控件,允许用户只输入数字, <td> <input id="ssd& ...
- Asp.net自定义控件开发任我行(8)-数据集绑定
摘要 已经有好几天没有写博客了,今天继续,前几天写到了注册自定义事件,今天我们来讲数据集绑定. 先把运行效果截个图给大家看,让大家心里也有个底.(大家要从第一章开始看起,我们每一章都是接着前面没做完的 ...
- python - 接口自动化测试 - basic_data - 基础数据参数化方法封装
# -*- coding:utf-8 -*- ''' @project: ApiAutoTest @author: Jimmy @file: basic_data.py @ide: PyCharm C ...