网站链接: ngui
当前位置: 首页 > 学习教程  > 互联网媒体

简单实现本地QQ聊天器(最简单版本)

2020/12/20 21:51:52 人评论 文章标签: qq强制聊天代码

之前老师为了讲"socket"套接字,讲了一遍如何实现一个简单版本的QQ聊天器,今天复习了一遍,觉得有些地方的知识点还是没有掌握的很好,于是来一篇博客压压惊先简单介绍一下”socket”套接字: 在客户/服务器通信模式中, 客户端需要主动创建与服务器连接的 Socket(套接字)…

之前老师为了讲"socket"套接字,讲了一遍如何实现一个简单版本的QQ聊天器,今天复习了一遍,觉得有些地方的知识点还是没有掌握的很好,于是来一篇博客压压惊

先简单介绍一下”socket”套接字:

 在客户/服务器通信模式中, 客户端需要主动创建与服务器连接的 Socket(套接字), 服务器端收到了客户端的连接请求, 也会创建与客户连接的 Socket. Socket可看做是通信连接两端的收发器, 服务器与客户端都通过 Socket 来收发数据.
 一句话蔽之就是"socket"就是客户端和服务器端之间的联通管道,任何信息的收发都是通过"socket"套接字来实现的

介绍完了”socket”套接字的概念,就来简单介绍一下实现”socket”的代码

客户端:
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TestClient {

    public static void main(String[] args) {
        try {
            Socket socket = new Socket("127.0.0.1",9999);
            OutputStream os = socket.getOutputStream();
            os.write(2);
            InputStream is = socket.getInputStream();
            System.out.println("server:"+is.read());
        } catch (Exception e) {

        }
    }

}


服务器端
package SocketPractice;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;


public class TestServer {

    public static void main(String[] args) {
        try {
            //创建一个服务器套接字对象 并绑定到特定端口号
            ServerSocket server = new ServerSocket(9999);
            //获取连接的客户端对象
            //如果没有连接的对象 此处将堵塞
            Socket socket = server.accept();
            OutputStream os = socket.getOutputStream();
            os.write(1);
            InputStream is = socket.getInputStream();
            System.out.println("client:"+is.read());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
/*
其中的ServerSocket server = new ServerSocket(9999);
9999表示端口号
Socket socket = new Socket("127.0.0.1",9999);
"127.0.0.1"表示服务端的地址

若想要获得连接,端口号和服务端地址都不能有差错
当连接成功后,就可以通过socket对象进行数据的传输了
/*

现在进入正题,介绍一下简单本地QQ聊天器的实现
先上一个效果图
这里写图片描述

现在上代码
- QQ的客户端

package SocketPractice;

import java.awt.BorderLayout;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.*;

public class QQClient extends JFrame {

    public QQClient(){

        //上面部分的的聊天框
        JTextArea jta = new JTextArea();
        JScrollPane jsp = new JScrollPane(jta);
        jta.setEditable(false);

        //下面部分的输入框
        JPanel jp = new JPanel();
        JButton send = new JButton("发送");
        JTextField jtf = new JTextField(20);
        jp.add(send);
        jp.add(jtf);

        this.add(jp,BorderLayout.SOUTH);
        this.add(jsp);

        //基本设置
        this.setSize(500,550);
        this.setTitle("Client");
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        try {
            Socket socket = new Socket("127.0.0.1",9999);
            InputStream is = socket.getInputStream();
            OutputStream os = socket.getOutputStream();
            send.addActionListener(new SendClientListener(jtf, jta, os));
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String msg = null;
            while((msg = br.readLine())!=null){
                jta.append("server:"+msg+"\r\n");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new QQClient();
    }
}
  • 客户端send按钮的监听器
package SocketPractice;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.OutputStream;
import java.io.PrintWriter;

import javax.swing.*;

public class SendClientListener implements ActionListener {

    private JTextField jtf ;
    private JTextArea jta;
    private OutputStream os;

    public SendClientListener(JTextField jtf,JTextArea jta,OutputStream os){
        this.jtf = jtf;
        this.jta = jta;
        this.os = os;
    }

    public void actionPerformed(ActionEvent e){
        String msg = jtf.getText();
        jtf.setText("");
        jta.append("Client"+msg+"\r\n");
        PrintWriter pw = new PrintWriter(os,true);
        pw.println(msg);
    }
}
  • QQ的服务器端
package SocketPractice;

import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.*;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import org.xml.sax.InputSource;

public class QQserver extends JFrame {

    public QQserver(){

        //下面部分
        JPanel jp = new JPanel();
        JButton send = new JButton("发送");
        JTextField jtf = new JTextField(20);
        jp.add(send);
        jp.add(jtf);
        this.add(jp,BorderLayout.SOUTH);

        //下面部分
        JTextArea jta = new JTextArea();
        jta.setEditable(false);
        JScrollPane jsp = new JScrollPane(jta);
        this.add(jsp);



        this.setSize(550,500);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("server");

        try {
            ServerSocket server = new ServerSocket(9999);
            Socket socket = server.accept();
            OutputStream os = socket.getOutputStream();
            send.addActionListener(new SendServerListener(jtf, jta, os));
            InputStream is = socket.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String msg = null;
            while((msg = br.readLine())!=null){
                jta.append("Client:"+msg+"\r\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        new QQserver();
    }

}
  • 服务器端send按钮的监听器
package SocketPractice;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;

import javax.swing.*;

public class SendServerListener implements ActionListener {

    private JTextField jtf;
    private JTextArea jta;
    OutputStream os;

    public SendServerListener(JTextField jtf,JTextArea jta,OutputStream os ){
        this.jtf = jtf;
        this.jta = jta;
        this.os = os;
    }

    public void actionPerformed(ActionEvent e){
        //从输入框将文本获取
        String msg = jtf.getText();
        //清空
        jtf.setText("");
        //将文本输送到聊天框内
        jta.append("server"+msg+"\r\n") ;
        //true代表着自动刷新
        PrintWriter pw = new PrintWriter(os,true);
        pw.println(msg);

    }

}

以上就是全部代码,现在我要总结一下做QQ聊天器中我犯的一些问题

  1. 任何的监听器,都应该实现”ActionListener”这个接口,否则在面板中添加监听器时,会出现实参不匹配,要求增加cast强制类型转换的报错提示

  2. 在监听器的代码中”actionPerformed”的方法中,含有”PrintWriter”流,这个流负责着向另一端的socket输出文本的任务,既然是一个输出流,就会有着刷新的责任,所以可以这样做,自动的刷新流.

PrintWriter pw = new PrintWriter(os,true);

如若不然,就会出现文本停留到流中,而不会传送到在另一端的现象.

3.当涉及到纯文本传输的时候,可以考虑先用”InputStream”流来建立字节流,再用”InputStreamReader”流来修饰原来的字节流,将其变为字符流,再用一个”BufferedReader”修饰,成为了一个自带缓冲区的字符流,这样的操作对处理纯文本更加合理.

            InputStream is = socket.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String msg = null;
            while((msg = br.readLine())!=null){
                jta.append("Client:"+msg+"\r\n");
            }
注意一点:
        BufferedReader 的读取,是用.readline()方法,而不是read()方法,而且判断用null,而不是-1
本文链接: http://www.dtmao.cc/news_show_20244.html

附件下载

上一篇:QQ小小搞怪十三招

下一篇:幻世录1秘籍

相关教程

  • 简单实现本地QQ聊天器(最简单版本)

    之前老师为了讲"socket"套接字,讲了一遍如何实现一个简单版本的QQ聊天器,今天复习了一遍,觉得有些地方的知识点还是没有掌握的很好,于是来一篇博客压压惊先简单介绍一下”socket”套接字: 在客户/服务器通信模式中, 客户端需要主动创建与服务器连接的 Socket(套接字)…

    2020/12/20 21:51:52
  • QQ小小搞怪十三招

    一、真正地隐藏QQ    在单位您可能也需要使用QQ,但并不是每个单位都会同意使用QQ的,抛去技术上的封锁不说,上司监视的目光也是很危险的,怎么办呢?别着急,我有办法!    ①首先,…

    2020/12/20 21:51:51
  • QQ聊天界面的布局和设计(IOS篇)-第二季

    公开课APP 荐 周刊 登录 QQ聊天界面的布局和设计(IOS篇)-第二季 时间 2015-06-08 21:28:00 博客园精华区原文 http://www.cnblogs.com/objectc/p/4561781.html主题 iOS开发QQChat Layout - 第二季 本来第二季是快写好了, 也花了点功夫, 结果gitbook出了点问题, 给没掉了。有些…

    2020/12/20 21:51:50
  • c++/MFC CSocket仿QQ聊天软件,实现1对1聊天,群聊

    学习,c有2个星期了。本来,本人是做php出身的。做php快2年了,最近身边多了很多高手。让自己对c开始感兴趣了,就开始学习c了。首先接触的就是mfc。前几天,看到了一个博文,是有关,mfc网络编程的。可…

    2020/12/20 21:51:48
  • QQ强制聊天。可以在购物平台上,做为服务者和客户聊天的工具。

    你只要在自己的网页上、粘上代码就行了。 <a href"http://sighttp.qq.com/cgi-bin/check?sigkey"; target_blank; onclick"var tempSrchttp://sighttp.qq.com/wpa.js?rantimeMath.random()&sigkey;var oldscriptdocument.getElementById(testJs);var n…

    2020/12/20 21:51:46
  • 总结:QQ聊天技巧之完整攻略

    1、将您的QQ的在线状态发布在互联网上 将您的QQ的在线状态发布在互联网上&#xff0c;不用加好友也可以聊天. 将您的QQ/TM的在线状态发布在互联网上&#xff1b;点击 QQ在线&#xff0c;不用加好友也可以聊天&#xff1b;寻找商机&#xff0c;广交朋友&#xff0c;"互动…

    2020/12/20 21:51:45
  • 在网页中发起QQ临时对话的方法

    首先 登录QQ官方推广网站http://shang.qq.com/v3/widget.html 用要被对话的QQ账号登录 第一步 选择按钮样式和填写提示语 第二步 复制自动生成的代码到html文件中 网页效果 点击按钮后出现聊天窗口 即可发起临时对话

    2020/12/20 21:51:44
  • html打开个人QQ聊天页面

    打开qq聊天页面&#xff08;有权限需要添加好友&#xff09; <a href"tencent://message/?uin1578929883&Site&Menuyes" class"icon icon-qq first"></a> 强制打开临时会话 <a href"tencent://message/?Menuyes&uin这里…

    2020/12/20 21:51:43
  • IRC扫盲——你可以不会玩QQ,但不能不会IRC!

    IRC扫盲——你可以不会玩QQ&#xff0c;但不能不会IRC&#xff01; 详见&#xff1a; http://www.linuxsir.org/bbs/showthread.php?t29323引用 IRC黑客世界最流行的交流工具&#xff0c;其强大而复杂的功能让许多人又爱又怕&#xff0c;花些精力和时间去学习和掌握它是绝对必…

    2020/12/20 21:51:40
  • python TCP实现聊天程序

    这是我Python课的课程设计&#xff0c;按理说这种聊天程序应该用UDP的&#xff0c;但是我的课程设计题目是TCP的&#xff0c;所以就用TCP写了 由于是课程设计&#xff0c;所以写的也没有那么复杂&#xff0c;后面有时间了再添加新功能&#xff0c;如果有什么建议可以联系我&am…

    2020/12/20 21:51:37
  • 点击链接跳转QQ跳转到聊天界面添加好友的方法

    最初项目里用的环信即时通讯作为客服聊天工具&#xff0c;其实用的人也不多&#xff0c;现在客户有问题都是直接打call&#xff0c;哪有功夫跟你聊天&#xff0c;万一斗起来图了怎么办&#xff0c;感觉有点鸡肋&#xff0c;不过Boss在安利app的时候算是一个亮点吧&#xff0c;突…

    2020/12/20 21:51:36
  • 30秒自制简单程序,和任意QQ号码聊天

    在电脑屏幕的左下角按“开始→程序→附件→记事本”&#xff0c;把下面的文字复制进去&#xff08;黑色部分&#xff09;&#xff0c;点“另存为”&#xff0c;路径选“桌面”&#xff0c;保存类型为“所有文件”&#xff0c;文件名为“qq强制聊天工具.bat”&#xff0c;就完成…

    2020/12/20 21:51:34
  • 不加好友实现QQ在线代码状态临时会话

    网友在介绍怎么样使用QQ来强制聊天&#xff0c;才想到以前一直遇到的QQ在线生成代码后&#xff0c;遇到的必须添加好友才能聊天的一个疑问。 公告&#xff1a;“QQ在线状态”V2.0正式发布&#xff0c;解决了QQ2009用户点击“在线状态”后须添加好友才能对话的问题&#xff0c;提…

    2020/12/20 21:51:33
  • QQ群统一规范与守则

    -------------------------------------------------------------《QQ群统一规范与守则》----------------------------------------------------- 说明 本规范所提到的任何条例规定&#xff0c;仅是建议遵守&#xff0c;是否遵守本约定&#xff0c;由群主及众群员自发认可。…

    2020/12/20 21:51:32
  • 鲜为人知的QQ自动强制加好友代码

    是的&#xff0c;你也许见过强行聊天的代码&#xff1a; tencent://Message/?Uin574201314&websiteNamewww.oicqzone.com&Menuyes 但是你应该不知道&#xff0c;还有强行加好友的代码&#xff1a; tencent://AddContact/?fromId45&fromSubId1&subcmdall&…

    2020/12/20 21:51:31
  • 调用QQ与陌生人聊天

    <a hrefhttp://wpa.qq.com/msgrd?V1&Uin你的QQ号码&site显示的来源信息>要链接的字符串</a>

    2020/12/20 21:51:29
  • Python 唤起QQ对话框 QQ客服效果

    脚本说明 系统&#xff1a;windows10 家庭中文版 软件&#xff1a;chrome浏览器、pycharm、Python3.x 原理&#xff1a;使用windows脚本&#xff0c;控制chrome浏览器&#xff0c;发起网页会话 0、项目内新建文件&#xff0c;后缀改为 .bat 如图&#xff1a;dd.bat 1、编辑…

    2020/12/20 21:51:28
  • QQ强行聊天 批处理源码

    echo off title QQ强制聊天工具 color 0c echo. echo. echo. echo. echo. 本程序应用于与任意号码聊天&#xff0c;也可以用于骚扰把你加入黑名单的Q友…… echo. 有空欢迎光临 www.hbcser.cn echo. echo. echo. echo. 请先打开QQ&#xff01;&#xff01;否则本程序无…

    2020/12/20 21:51:26
  • Java通信-仿QQ聊天项目

    前后历时一个多月的Java实现聊天通信项目-仿QQ聊天室基本告一段落&#xff0c;期间面对了很多问题&#xff0c;也有不同的解决方案&#xff0c;重写了几次核心代码&#xff0c;等等问题。现在在项目的结束之时&#xff0c;给自己做一个总结&#xff0c;算是一个回顾&#xff0c…

    2020/12/20 21:51:25
  • QQ聊天界面实现

    QQ聊天界面实现 效果如下&#xff1a; 实现过程&#xff1a; 1、首先实现基本界面 头像使用 UIImageView &#xff1a; 文字消息使用 UIButton 标签使用 UILable &#xff1a;水平居中 所有元素在一个cell中&#xff0c;在加载cell时进行判断显示和隐藏。 合理设置各个控件之间…

    2020/12/20 21:51:24
  • 史上最全面Java面试汇总(面试题+答案)

    微信搜索&#xff1a;“二十同学” 公众号&#xff0c;欢迎关注一条不一样的成长之路 JAVA面试精选【Java基础第一部分】 JAVA面试精选【Java基础第二部分】 JAVA面试精选【Java基础第三部分】 JAVA面试精选【Java算法与编程一】 JAVA面试精选【Java算法与编程二】 Java高…

    2020/12/20 21:51:22
  • Web QQ自动强制加好友代码

    有朋友找我看网页代码&#xff0c;这个在PC上打开的内容是这样&#xff0c;有段JS代码 <script>window.location.hreftencent://AddContact/?fromId45&fromSubId1&subcmdall&uin30729822</script> 这个是但是在手机上就不行了。为什么相同代码运行效…

    2020/12/20 21:51:20

共有条评论 网友评论

验证码: 看不清楚?