实现一对一自由聊天

客户端

package cn.qianfeng.kaoti03;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

class ReceiveSocket implements Runnable {
    private Socket s;

    public ReceiveSocket(Socket s) {
        super();
        this.s = s;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        BufferedReader br = null;
        try {
            while (true) {

                br = new BufferedReader(new InputStreamReader(
                        s.getInputStream()));
                String line = br.readLine();
                if (line != null) {
                    System.out.println(line);
                }

            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

    }
}

class SendSocket implements Runnable {
    private Socket s;

    public SendSocket(Socket s) {
        super();
        this.s = s;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        BufferedReader br = null;
        try {
            while (true) {

                br = new BufferedReader(new InputStreamReader(System.in));
                PrintStream ps = new PrintStream(s.getOutputStream(), true);
                String line = br.readLine();
                ps.println("A:" + line);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }

    }
}

public class TestSocket {
    public static void main(String[] args) {
        try {
            Socket s = new Socket("localhost", 8888);
            new Thread(new SendSocket(s)).start();
            new Thread(new ReceiveSocket(s)).start();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

服务端

package cn.qianfeng.kaoti03;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

class SendServerSocket implements Runnable {
    private Socket s;

    public SendServerSocket(Socket s) {
        super();
        this.s = s;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        BufferedReader br = null;
        PrintWriter ps = null;
        try {
            while (true) {

                br = new BufferedReader(new InputStreamReader(System.in));
                ps = new PrintWriter(s.getOutputStream(), true);
                String line = br.readLine();
                if (line != null) {
                    ps.println("B:" + line);
                }

            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }

    }
}

class ReceiveServerSocket implements Runnable {
    private Socket s;

    public ReceiveServerSocket(Socket s) {
        super();
        this.s = s;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        BufferedReader br = null;
        try {
            while (true) {

                br = new BufferedReader(new InputStreamReader(
                        s.getInputStream()));

                String line = br.readLine();
                if (line != null) {
                    System.out.println(line);

                }
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }

    }

}

public class TestServerSocket {
    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(8888);
            Socket s = ss.accept();
            System.out.println(s.getInetAddress().getHostName()
                    + ".....connected");

            new Thread(new SendServerSocket(s)).start();
            new Thread(new ReceiveServerSocket(s)).start();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
时间: 2024-10-05 17:19:17

实现一对一自由聊天的相关文章

「iOS开发」关于一对一视频聊天直播系统技术(二)处理

针对视频直播的实时流网络 LiveNet 和完整的直播云解决方案,很多开发者对这个网络和解决方案的细节和使用场景非常感兴趣. 结合实时流网络 LiveNet 和直播云解决方案的实践,我们将用一系列文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面.深入地了解视频直播技术,更好地技术选型. 在上期采集中,我们介绍了视频采集针对音频采集和图像采集以及它们分别对应两种完全不同的输入源和数据格式. 本篇是<解密一对一视频聊天直播技术>系列之二:处理.我们将讲解常见视频处

基于swoole的网页一对一实时聊天

需求分析 网站上实现一对一即时沟通,能查看聊天记录以及离线留言,新消息提醒. 核心技术 html5的websocket,php的swoole扩展http://wiki.swoole.com/ 数据表 CREATE TABLE `msg` ( `id` int(11) NOT NULL AUTO_INCREMENT, `content` varchar(255) NOT NULL DEFAULT '' COMMENT '内容', `tid` int(11) NOT NULL DEFAULT '0'

开源项目--蓝牙聊天

前言 基于Android Classic Bluetooth的蓝牙聊天软件,目前仅支持一对一实时通信.文件传输.好友添加.好友分组.好友在线状态更新等功能,其中消息发送支持文本.表情等方式. 项目地址:https://github.com/xiaoyaoyou1212/BluetoothChat(欢迎Fork参与) 前景 蓝牙技术作为一种小范围无线连接技术,能够在设备间实现方便快捷.灵活安全.低成本.低功耗的数据和语音通信,是目前实现无线个人局域网的主流技术之一.同时,蓝牙系统以自组式组网的方式

python 全双工 socket聊天

自学python一段时间,一直想弄个有意思的东西,所以就拿socket做一个聊天室,可以一对多,一对一全双工聊天.后续可能完善代码在鼓弄一个带gui界面的,比较有逼格. 服务端: 使用socketserver模块,多线程异步处理客户端消息,接受客户消息并转发 既服务端为一个中转站. 加入了 登陆 注册 多人聊天 一对一功能 客户端: 主线程连接服务端,两个子线程分别负责读写 server: SocketServer time ctime threadingtraceback Queue db D

Android 即时语音聊天工具 开发

使用融云SDK 1. 功能需求分析 1.1 核心功能需求: * 即时通讯 * 文字聊天 * 语音聊天 1.2 辅助功能需求: * 注册.登录 * 好友添加功能 * 好友关系管理 2. 融云即时通讯平台简介 2.1 平台简介, * 即时通讯,实时网络 提供商 * 客户端IM组件, 客户端IM基础库, WebSDK,服务端 REST API 2.2 平台架构介绍 我们需要关系 App, App Server 2.3 概念介绍 * App Key/Secret:  有生产环境 和 开发环境区别 * T

Agora Android SDK-开始聊天

自从2016年,鼓吹"互联网寒冬"的论调甚嚣尘上,2017年亦有愈演愈烈之势.但连麦直播.在线抓娃娃.直播问答.远程狼人杀等类型的项目却异军突起,成了投资人的风口,创业者的蓝海和用户的必装App,而这些方向的项目都有一个共同的特点--都依赖视频通话和全互动直播技术. 声网Agora.io是一家提供稳定,高可用,有质量保障的实时视频通话和实时全互动直播技术服务的平台,提供一个极简SDK让开发者接入SD-RTN?实时虚拟通信网,在任何App和网站都可以实现高质量的音频通话.视频通话.全互动

Android多人视频聊天应用的开发(三)多人聊天

在上一篇<Android多人视频聊天应用的开发(二)一对一聊天>中我们学习了如何使用声网Agora SDK进行一对一的聊天,本篇主要讨论如何使用Agora SDK进行多人聊天.主要需要实现以下功能: 1.上一篇已经实现过的聊天功能 2.随着加入人数和他们的手机摄像头分辨率的变化,显示不同的UI,即所谓的"分屏" 3.点击分屏中的小窗,可以放大显示该聊天窗 分屏 根据前期技术调研,分屏显示最好的方式是采用瀑布流结合动态聊天窗实现,这样比较方便的能够适应UI的变化.所谓瀑布流,

Redis实现聊天功能

在学习了Redis做为消息队列之后研究 了redis聊天的功能. 其实用关系型数据库也可以实现消息功能,自己就曾经用mysql写过一个简单的消息的功能.RDB中思路如下: ** 在实际中可以完全借助mysql数据库实现聊天功能,建立一个表,保存接收人的username.message.isConsumed等信息,用户登录之后采用心跳机制不停的检测数据库并消费消息. 心跳可以做好多事,比如检测检测当前用户是否已经登录,如果已经登录剔除之前已经登录的用户,实现一个用户一次登录的功能. 心跳可以采用J

源于直播又高于直播,一对一直播源码引领时尚新热潮

作者/布谷惠泽 来源/山东布谷鸟网络 随着移动互联网技术的发展日新月异,新的程序产品层出不穷,直播市场也是精彩纷呈,战况十分激烈,由此看来直播平台寻找新的解决方案也是迫在眉睫,在这种市场情况下,各种"直播+"的方案先后推出,音乐,教育,人文等都在垂直领域和直播进行了很好的融合,在诸多解决方案中,一对一直播平台源码顺应市场,走出了一条属于自己的特色鲜明的道路. 综合各大应用市场社交app的下载应用数据来看,一对一直播源码平台上说是风口也不为过."及时+交互"的模式,在