精华内容
下载资源
问答
  • 个人博客网站/实现在线聊天功能 所用知识 前端 HTML,CSS,JavaScript Websocket Vue.js bootstrap 后端 PHP Workworkerman Mysql 实现功能 登录功能(login.php) 注册功能(register.html) 网页后台管理(indexBackStage...
  • 主要为大家详细介绍了Redis实现多人多聊天功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • php实现聊天功能完整代码发布时间:2020-05-18 16:56:01来源:亿速云阅读:202作者:Leah这篇文章主要为大家详细介绍了php实现聊天功能,文中示例代码介绍的非常详细,零基础也能参考此文章,感兴趣的小伙伴们...

    php实现聊天室功能完整代码

    发布时间:2020-05-18 16:56:01

    来源:亿速云

    阅读:202

    作者:Leah

    这篇文章主要为大家详细介绍了php实现聊天室功能,文中示例代码介绍的非常详细,零基础也能参考此文章,感兴趣的小伙伴们可以参考一下。

    1、在前端使用Ajax定时轮询访问php脚本,php再进行查询聊天数据进行返回给前端,最后前端将其进行渲染;

    代码示例:

    聊天室

    $(function(){

    $("#post").click(function(){

    var content=$("#content").val();

    if(!$.trim(content)){

    alert('请填写内容');

    return false;

    }

    $("#content").val("");

    $.post("ajax.php", {content:content});});

    })

    function getData(msg){

    if(msg == undefined)

    {

    msg = '';

    }

    $.post("get.php",{"msg":msg},function(data){

    //var myjson = eval("("+data+")");

    if(data){

    var chatcontent = '';

    var obj = eval('('+data+')');

    $.each(obj,function(key,val){

    chatcontent += "

    "+val['username']+" 说:
    ";

    chatcontent += "

    "+val['content']+"
    ";

    })

    $("#chatshow").html(chatcontent);

    }

    getData();

    })

    }

    // function getUser(msg){

    // if(msg == undefined){

    // msg = '';

    // }

    // $.post("getuser.php",{"msg":msg},function(data){

    // //var myjson = eval("("+data+")");

    // if(data){

    // var chatcontent = '';

    // var obj = eval('('+data+')');

    // $.each(obj,function(key,val){

    // chatcontent += "

    "+val['username']+" 说:
    ";

    // chatcontent += "

    "+val['content']+"
    ";

    // })

    // $("#chatshow").html(chatcontent);

    // }

    // getData();

    // })

    // }

    getData("one");

    // $(function(){

    // $("#userlist p").click(function(){

    // $("#content").val("@"+$(this).text()+" ");

    // })

    // })

    // $(function(){

    // $(document).keypress(function(e){

    // if(e.ctrlKey && e.which == 13 || e.which == 10) {

    // var content=$("#content").val();

    // if(!$.trim(content)){

    // alert('请填写内容');

    // return false;

    // }

    // $("#content").val("");

    // $.post("ajax.php", {content:content});

    // }

    // })

    // //alert(event.clientX+document.body.clientWidth);

    // })

    /*window.οnbefοreunlοad=function (){

    //return("===οnbefοreunlοad===");

    if(event.clientX>document.body.clientWidth && event.clientY < 0 || event.altKey){

    return("你关闭了浏览器");

    }else{

    return(document.body.clientWidth);

    }

    } */

    #chat{margin:0 auto;}

    #chatshow{width:500px;height:400px;overflow:auto;border:1px solid #ccc;float:left;}

    #userlist{width:100px;height:400px;overflow:auto;border:1px solid #ccc;float:left;margin-right:2px;}

    #userlist p{color:#0F0; cursor:pointer;}

    .clearboth{clear:both;}

    .username{font-weight:bold;color:#00F;font-size:12px;margin-bottom:3px;margin-top:8px;}

    在线用户列表

    // $dsn = "mysql:host=localhost;dbname=test;charset=utf8'";

    // $db = new PDO($dsn, 'root', 'root');

    $db = new PDO('mysql:dbname=test;host=127.0.0.1;charset=utf8', 'root', 'adminroot');

    $rs = $db->prepare("select * from chat where is_login = '1'");

    $rs->execute();

    while($row = $rs->fetch()){

    echo '

    '.$row['username'].'

    ';

    }

    ?>

    /*session_start();

    $mem = new Memcache;

    $mem->connect("localhost",11211);

    if(isset($_POST['content'])){

    $con['username'] = $_SESSION["username"];

    $con['content'] = $_POST["content"];

    $data = $mem->get('chat');

    $data[] = $con;

    $mem->set("chat",$data,0,0);

    }

    $mem->close();

    */

    if(isset($_POST['content'])){

    session_start();

    $filename = date("Ymd",time()).".txt";

    if(file_exists($filename)){

    $content = file_get_contents($filename);

    $data = json_decode($content,true);

    $con['username'] = $_SESSION["username"];

    $con['content'] = $_POST["content"];

    $data[] = $con;

    $file = fopen($filename,"w");

    fwrite($file,json_encode($data));

    fclose($file);

    }else{

    $file = fopen($filename,"w");

    $con['username'] = $_SESSION["username"];

    $con['content'] = $_POST["content"];

    $data[] = $con;

    fwrite($file,json_encode($data));

    fclose($file);

    }

    }

    ?><?php

    /*require 'conn.inc';

    function getData(){

    $sql="SELECT count(*) FROM `talkroom`";

    $res=mysql_query($sql);

    $count = mysql_fetch_row($res);

    return $count;

    }

    $old = getData();

    while(true){

    $new = getData();

    if($new[0]>$old[0]){

    //echo json_encode($new['data']);

    //print_r($new);

    echo '2222222222'.'
    ';

    }

    //echo '
    11111111111111111111111111111111111111111111111111111111111111111111';

    usleep(1000);

    }

    */

    /*set_time_limit(0);

    $mem = new Memcache;

    $mem->connect("localhost",11211);

    $count = count($mem->get("chat"));

    $com = true;

    //$mem->delete('chat');

    if($_POST['msg'] == "one"){

    exit(json_encode($mem->get("chat")));

    }

    if($_POST['msg'] == "break"){

    $com = false;

    }

    $time1 = time();

    while(true){

    if($com){

    $data = $mem->get("chat");

    if(count($data)>$count){

    echo json_encode($data);

    break;

    }

    usleep(300);

    }else{

    break;

    }

    }

    $mem->close();*/

    set_time_limit(0);

    $filename = date("Ymd",time()).".txt";

    if(file_exists($filename)){

    $content = file_get_contents($filename);

    $data = json_decode($content,true);

    $count = count($data);

    // echo $count;die;

    if($_POST['msg'] == "one"){

    exit(json_encode($data));

    }

    while(true){

    $contents = file_get_contents($filename);

    $datas = json_decode($contents,true);

    $counts = count($datas);

    if($counts>$count){

    echo json_encode($datas);

    break;

    }

    usleep(300);

    }

    }else{

    $file = fopen($filename,"w");

    $con['username'] = "系统消息";

    $con['content'] = "欢迎来到EPGO聊天室";

    $data[] = $con;

    fwrite($file,json_encode($data));

    fclose($file);

    exit(json_encode($data));

    }

    ?>

    2、使用WebSocket和服务器进行长连接,来实现聊天功能。

    客户端代码:

    websocket聊天室

    .message img {

    float: left;

    width: 40px;

    height: 40px;

    margin-right: 12px;

    border-radius: 50%;

    }

    .you {

    margin-left: 60px;

    margin-top: -39px;

    }

    .me-header {

    float: right !important;

    margin-right: 0 !important;

    }

    .me {

    margin-right: 60px;

    margin-top: -39px;

    }

    .active-chat::-webkit-scrollbar, .left::-webkit-scrollbar {

    width: 2px;

    }

    在线人数: 0
    Tips: PHP之websocket聊天室

    style="height: auto;border-width: 0px;padding: 10px;height: 483px; padding: 10px;overflow-y: auto;scrollTop: 100px">

    var uname = prompt('请输入用户名', 'user' + uuid(8, 16));

    var avatar = ['bo-jackson.jpg', 'dog.png', 'drake.jpg', 'louis-ck.jpeg', 'michael-jordan.jpg', 'thomas.jpg'];

    if (avatar[Math.round(Math.random() * 10)]) {

    var headerimg = "img/" + avatar[Math.round(Math.random() * 10)];

    } else {

    var headerimg = "img/" + avatar[0];

    }

    // 创建一个 websocket 连接

    var ws = new WebSocket("ws://127.0.0.1:1238");

    // websocket 创建成功事件

    ws.onopen = function () {

    var data = "系统消息:建立连接成功";

    console.log(data);

    };

    // websocket 接收到消息事件

    ws.onmessage = function (e) {

    var data = JSON.parse(e.data);

    switch (data.type) {

    case 'handShake':

    console.log(data.msg);

    //发送用户登录

    var user_info = {'type': 'login', 'msg': uname, 'headerimg': headerimg};

    sendMsg(user_info);

    break;

    case 'login':

    userList(data.user_list);

    systemMessage('系统消息: ' + data.msg + ' 已上线');

    break;

    case 'logout':

    userList(data.user_list);

    if (data.msg.length > 0) {

    systemMessage('系统消息: ' + data.msg + ' 已下线');

    }

    break;

    case 'user':

    messageList(data);

    break;

    case 'system':

    systemMessage();

    break;

    }

    }

    // websocket 错误事件

    ws.onerror = function () {

    var data = "系统消息 : 出错了,请退出重试.";

    alert(data);

    };

    function confirm(event) {

    var key_num = event.keyCode;

    if (13 == key_num) {

    send();

    } else {

    return false;

    }

    }

    function systemMessage(msg) {

    var html = `

    ` + msg + `

    `;

    var active_chat = document.querySelector('div.active-chat');

    var oldHtml = active_chat.innerHTML;

    active_chat.innerHTML = oldHtml + html;

    active_chat.scrollTop = active_chat.scrollHeight;

    }

    function send() {

    var msg = document.querySelector("input#input-value").value;

    var reg = new RegExp("\r\n", "g");

    msg = msg.replace(reg, "");

    sendMsg({type: "user", msg: msg});

    document.querySelector("input#input-value").value = "";

    }

    function sendMsg(msg) {

    var data = JSON.stringify(msg);

    ws.send(data);

    }

    function userList(user) {

    var html = '';

    for (var i = 0; i < user.length; i++) {

    html += `

    ` + user[i].username + `

    ` + user[i].login_time + `

    在线

    `;

    }

    document.querySelector('ul.people').innerHTML = html;

    document.querySelector('span#numbers').innerHTML = user.length;

    }

    function messageList(data) {

    if (data.from == uname) {

    var html = `

    ` + data.msg + `
    `;

    } else {

    var html = `

    ` + data.msg + `
    `;

    }

    var active_chat = document.querySelector('div.active-chat');

    var oldHtml = active_chat.innerHTML;

    active_chat.innerHTML = oldHtml + html;

    active_chat.scrollTop = active_chat.scrollHeight;

    }

    /**

    * 生产一个全局唯一ID作为用户名的默认值;

    *

    * @param len

    * @param radix

    * @returns {string}

    */

    function uuid(len, radix) {

    var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');

    var uuid = [], i;

    radix = radix || chars.length;

    if (len) {

    for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];

    } else {

    var r;

    uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';

    uuid[14] = '4';

    for (i = 0; i < 36; i++) {

    if (!uuid[i]) {

    r = 0 | Math.random() * 16;

    uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];

    }

    }

    }

    return uuid.join('');

    }

    服务端代码:<?php

    /**

    * Created by PhpStorm.

    * User: 25754

    * Date: 2019/4/23

    * Time: 14:13

    */

    class socketServer

    {

    const LISTEN_SOCKET_NUM = 9;

    const LOG_PATH = "./log/";

    private $_ip = "127.0.0.1";

    private $_port = 1238;

    private $_socketPool = array();

    private $_master = null;

    public function __construct()

    {

    $this->initSocket();

    }

    private function initSocket()

    {

    try {

    //创建socket套接字

    $this->_master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

    // 设置IP和端口重用,在重启服务器后能重新使用此端口;

    socket_set_option($this->_master, SOL_SOCKET, SO_REUSEADDR, 1);

    //绑定地址与端口

    socket_bind($this->_master, $this->_ip, $this->_port);

    //listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程。在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被动连接,其中的能存储的请求不明的socket数目。

    socket_listen($this->_master, self::LISTEN_SOCKET_NUM);

    } catch (Exception $e) {

    $this->debug(array("code: " . $e->getCode() . ", message: " . $e->getMessage()));

    }

    //将socket保存到socket池中

    $this->_socketPool[0] = array('resource' => $this->_master);

    $pid = getmypid();

    $this->debug(array("server: {$this->_master} started,pid: {$pid}"));

    while (true) {

    try {

    $this->run();

    } catch (Exception $e) {

    $this->debug(array("code: " . $e->getCode() . ", message: " . $e->getMessage()));

    }

    }

    }

    private function run()

    {

    $write = $except = NULL;

    $sockets = array_column($this->_socketPool, 'resource');

    $read_num = socket_select($sockets, $write, $except, NULL);

    if (false === $read_num) {

    $this->debug(array('socket_select_error', $err_code = socket_last_error(), socket_strerror($err_code)));

    return;

    }

    foreach ($sockets as $socket) {

    if ($socket == $this->_master) {

    $client = socket_accept($this->_master);

    if ($client === false) {

    $this->debug(['socket_accept_error', $err_code = socket_last_error(), socket_strerror($err_code)]);

    continue;

    }

    //连接

    $this->connection($client);

    } else {

    //接受数据

    $bytes = @socket_recv($socket, $buffer, 2048, 0);

    if ($bytes == 0) {

    $recv_msg = $this->disconnection($socket);

    } else {

    if ($this->_socketPool[(int)$socket]['handShake'] == false) {

    $this->handShake($socket, $buffer);

    continue;

    } else {

    $recv_msg = $this->parse($buffer);

    }

    }

    $msg = $this->doEvents($socket, $recv_msg);

    echo($msg);

    socket_getpeername ( $socket , $address ,$port );

    $this->debug(array(

    'send_success',

    json_encode($recv_msg),

    $address,

    $port

    ));

    $this->broadcast($msg);

    }

    }

    }

    /**

    * 数据广播

    * @param $data

    */

    private function broadcast($data)

    {

    foreach ($this->_socketPool as $socket) {

    if ($socket['resource'] == $this->_master) {

    continue;

    }

    socket_write($socket['resource'], $data, strlen($data));

    }

    }

    /**

    * 业务处理

    * @param $socket

    * @param $recv_msg

    * @return string

    */

    private function doEvents($socket, $recv_msg)

    {

    //联系我

    }

    /**

    * socket握手

    * @param $socket

    * @param $buffer

    * @return bool

    */

    public function handShake($socket, $buffer)

    {

    $acceptKey = $this->encry($buffer);

    $upgrade = "HTTP/1.1 101 Switching Protocols\r\n" .

    "Upgrade: websocket\r\n" .

    "Connection: Upgrade\r\n" .

    "Sec-WebSocket-Accept: " . $acceptKey . "\r\n\r\n";

    // 写入socket

    socket_write($socket, $upgrade, strlen($upgrade));

    // 标记握手已经成功,下次接受数据采用数据帧格式

    $this->_socketPool[(int)$socket]['handShake'] = true;

    socket_getpeername ( $socket , $address ,$port );

    $this->debug(array(

    'hand_shake_success',

    $socket,

    $address,

    $port

    ));

    //发送消息通知客户端握手成功

    $msg = array('type' => 'handShake', 'msg' => '握手成功');

    $msg = $this->frame(json_encode($msg));

    socket_write($socket, $msg, strlen($msg));

    return true;

    }

    /**

    * 帧数据封装

    * @param $msg

    * @return string

    */

    private function frame($msg)

    {

    $frame = [];

    $frame[0] = '81';

    $len = strlen($msg);

    if ($len < 126) {

    $frame[1] = $len < 16 ? '0' . dechex($len) : dechex($len);

    } else if ($len < 65025) {

    $s = dechex($len);

    $frame[1] = '7e' . str_repeat('0', 4 - strlen($s)) . $s;

    } else {

    $s = dechex($len);

    $frame[1] = '7f' . str_repeat('0', 16 - strlen($s)) . $s;

    }

    $data = '';

    $l = strlen($msg);

    for ($i = 0; $i < $l; $i++) {

    $data .= dechex(ord($msg{$i}));

    }

    $frame[2] = $data;

    $data = implode('', $frame);

    return pack("H*", $data);

    }

    /**

    * 接受数据解析

    * @param $buffer

    * @return mixed

    */

    private function parse($buffer)

    {

    $decoded = '';

    $len = ord($buffer[1]) & 127;

    if ($len === 126) {

    $masks = substr($buffer, 4, 4);

    $data = substr($buffer, 8);

    } else if ($len === 127) {

    $masks = substr($buffer, 10, 4);

    $data = substr($buffer, 14);

    } else {

    $masks = substr($buffer, 2, 4);

    $data = substr($buffer, 6);

    }

    for ($index = 0; $index < strlen($data); $index++) {

    $decoded .= $data[$index] ^ $masks[$index % 4];

    }

    return json_decode($decoded, true);

    }

    // 提取 Sec-WebSocket-Key 信息

    private function getKey($req)

    {

    $key = null;

    if (preg_match("/Sec-WebSocket-Key: (.*)\r\n/", $req, $match)) {

    $key = $match[1];

    }

    return $key;

    }

    //加密 Sec-WebSocket-Key

    private function encry($req)

    {

    $key = $this->getKey($req);

    return base64_encode(sha1($key . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11', true));

    }

    /**

    * 连接socket

    * @param $client

    */

    public function connection($client)

    {

    socket_getpeername ( $client , $address ,$port );

    $info = array(

    'resource' => $client,

    'userInfo' => '',

    'handShake' => false,

    'ip' => $address,

    'port' => $port,

    );

    $this->_socketPool[(int)$client] = $info;

    $this->debug(array_merge(['socket_connect'], $info));

    }

    /**

    * 断开连接

    * @param $socket

    * @return array

    */

    public function disconnection($socket)

    {

    $recv_msg = array(

    'type' => 'logout',

    'msg' => @$this->_socketPool[(int)$socket]['username'],

    );

    unset($this->_socketPool[(int)$socket]);

    return $recv_msg;

    }

    /**

    * 日志

    * @param array $info

    */

    private function debug(array $info)

    {

    $time = date('Y-m-d H:i:s');

    array_unshift($info, $time);

    $info = array_map('json_encode', $info);

    file_put_contents(self::LOG_PATH . 'websocket_debug.log', implode(' | ', $info) . "\r\n", FILE_APPEND);

    }

    }

    new socketServer();

    以上就是php实现聊天室功能的具体代码,如果在日常工作遇到这个问题,希望你能通过这篇文章解决问题。如果想了解更多相关内容,欢迎关注亿速云行业资讯频道!

    展开全文
  • php实现简单聊天功能

    2021-03-22 23:39:23
    搜索热词1、创建聊天消息表,其表的字段有消息内容,发送时间和发送者的名称;CREATE TABLE `guanhui`.`message` (`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '消息ID',`content` VARCHAR(255) NOT NULL COMMENT...

    搜索热词

    1、创建聊天消息表,其表的字段有消息内容,发送时间和发送者的名称;

    CREATE TABLE `guanhui`.`message` (

    `id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '消息ID',`content` VARCHAR(255) NOT NULL COMMENT '消息内容',`sender` VARCHAR(60) NOT NULL COMMENT '发送者',`send_time` INT(10) NOT NULL COMMENT '发送时间',PRIMARY KEY (`id`)

    ) ENGINE = MyISAM;

    2、创建PHP文件将聊天消息查询出来,并以json格式输出;

    $con = MysqL_connect("localhost","","");

    if (!$con) {

    die('Could not connect: ' . MysqL_error());

    }

    MysqL_select_db("chat",$con);

    MysqL_query("set names 'utf8'");

    $sql = "SELECT * FROM `message`";

    $result = MysqL_query($sql);

    if(isset($result)){

    json_encode(array(

    'code' => 0,'msg' => 'OK','data' => MysqL_fetch_array($result,MysqL_ASSOC)

    ))

    } else {

    json_encode(array(

    'code' => 0,'msg' => '聊天信息为空!'

    ))

    }

    3、在前端使用Ajax轮询请求PHP文件,并将消息展示出来。

    setInterval(function(){

    $.get('/get_message_list.PHP',function(data){

    $(data).each(function(value,item){

    $('#message_list').append('来自:' + data.sender + '的消息:' + data.message + '发送时间:',data.send_time);

    });

    });

    },600);

    4、创建send_message.PHP用来接收发送的消息,并将数据储存到数据库。

    $send_time = date('Y-m-d H:i:s',time());;

    $send = $_POST['sender'];

    $content = $_POST['content'];

    $con = MysqL_connect("localhost","");

    if (!$con) {

    die('Could not connect: ' . MysqL_error());

    }

    MysqL_select_db("ing",$con);

    MysqL_query("set names 'utf8'");

    $insert="INSERT INTO `chat` (`id`,`sender`,`content`,`send_time`) VALUES (NULL,'$sender','$content','$send_time')";

    $result = MysqL_query($insert);

    5、在前端获取要发送的消息,并请求send_message.PHP。

    function sendcontent()

    {

    var xmlhttp;

    if (window.XMLHttpRequest)

    {// code for IE7+,Firefox,Chrome,Opera,Safari

    xmlhttp=new XMLHttpRequest();

    }

    else

    {// code for IE6,IE5

    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

    }

    xmlhttp.onreadystatechange=function()

    {

    if (xmlhttp.readyState==4 && xmlhttp.status==200)

    // 服务端返回了正确数据,开始响应处理

    {

    document.getElementById("input").innerHTML="";

    }

    }

    xmlhttp.open("POST","/send_message.PHP",true);

    var f=document.chat;

    var content = f.content.value;

    var sender = f.sender.value;

    //发送请求

    //这里使用Post方法传递参数;

    //将要构造的参数连接起来,接收的时候:$_POST['send'];

    var post_str= "content="+ content+"&sender="+sender;

    //使用post的时候必须在发送请求之前加上下面这句

    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");

    xmlhttp.send(post_str);

    }

    更多学习内容请访问:

    总结

    以上是编程之家为你收集整理的php实现简单聊天功能全部内容,希望文章能够帮你解决php实现简单聊天功能所遇到的程序开发问题。

    如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

    展开全文
  • 导读热词本文实例为大家分享了java实现多人聊天室的具体代码,供大家参考,具体内容如下程序源代码及运行截图:server.java//server.javapackage Socket;import java.io.BufferedReader;import java.io.IOException;...

    导读热词

    本文实例为大家分享了java实现多人聊天室的具体代码,供大家参考,具体内容如下

    程序源代码及运行截图:

    server.java

    //server.java

    package Socket;

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStreamReader;

    import java.io.PrintWriter;

    import java.net.ServerSocket;

    import java.net.Socket;

    import java.util.ArrayList;

    import java.util.List;

    import java.util.Scanner;

    public class server implements Runnable {// 服务端

    static List socketList=new ArrayList();

    // 读取 In

    static Socket socket = null;

    static ServerSocket serverSocket = null;

    public server() {// 构造方法

    try {

    serverSocket = new ServerSocket(9999);

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    System.out.println("************服务端*************");

    server t = new server();

    int count = 0;

    while (true) {

    try {

    // System.out.println("端口9999等待被连接......");

    socket = serverSocket.accept();

    count++;

    System.out.println("第" + count + "个客户已连接");

    socketList.add(socket);

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    Print p = new Print(socket);

    Thread read = new Thread(t);

    Thread print = new Thread(p);

    read.start();

    print.start();

    }

    }

    @Override

    public void run() {

    // 重写run方法

    try {

    Thread.sleep(1000);

    BufferedReader in = new BufferedReader(new InputStreamReader(socket

    .getInputStream()));

    while (true) {

    String jieshou = in.readLine();

    System.out.println( jieshou);

    for (int i = 0; i < socketList.size(); i++) {

    Socket socket=socketList.get(i);

    PrintWriter out = new PrintWriter(socket.getOutputStream());

    if (socket!=this.socket) {

    out.println(jieshou);

    }else{

    out.println("(你)"+jieshou);

    }

    out.flush();

    }

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    }

    class Print implements Runnable {

    static List socketList=new ArrayList();

    Scanner input = new Scanner(System.in);

    public Print(Socket s) {// 构造方法

    try {

    socketList.add(s);

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    @Override

    public void run() {

    try {

    Thread.sleep(1000);

    while (true) {

    String msg = input.next();

    for (int i = 0; i < socketList.size(); i++) {

    Socket socket=socketList.get(i);

    PrintWriter out = new PrintWriter(socket.getOutputStream());

    // System.out.println("对客户端说:");

    out.println("服务端说:"+msg);

    out.flush();

    }

    }

    } catch (Exception e) {

    // TODO: handle exception

    e.printStackTrace();

    }

    }

    }

    client.java

    //client.java

    package Socket;

    import java.io.BufferedReader;

    import java.io.InputStreamReader;

    import java.io.PrintWriter;

    import java.net.Socket;

    import java.util.Scanner;

    public class client implements Runnable {// 客户端

    static Socket socket = null;

    Scanner input = new Scanner(System.in);

    static String name=null;

    public static void main(String[] args) {

    int x=(int)(Math.random()*100);

    client.name="client"+x;

    System.out.println("************客户端"+x+"*************");

    try {

    socket = new Socket("127.0.0.1",9999);

    System.out.println("已经连上服务器了");

    } catch (Exception e) {

    e.printStackTrace();

    }

    client t = new client();

    Read r = new Read(socket);

    Thread print = new Thread(t);

    Thread read = new Thread(r);

    print.start();

    read.start();

    }

    @Override

    public void run() {

    try {

    Thread.sleep(1000);

    PrintWriter out = new PrintWriter(socket.getOutputStream());

    while (true) {

    String msg = input.next();

    out.println(name+"说:"+msg);

    out.flush();

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    }

    class Read implements Runnable {

    static Socket socket = null;

    public Read(Socket socket) {

    this.socket = socket;

    }

    @Override

    public void run() {

    try {

    Thread.sleep(1000);

    BufferedReader in = new BufferedReader(new InputStreamReader(socket

    .getInputStream()));

    while (true) {

    System.out.println( in.readLine());

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    }

    测试数据一:

    服务端程序运行截图:

    890d2995b5515e0be8f1c2a1b2102ed1.png

    客户端1程序运行截图:

    59d5f3ce6076dc2f7adc88cdd9cf3204.png 

    客户端2程序运行截图:

    95fc8ea5b1c832fe60051e0c64924e41.png 

    由测试数据一可以看出:程序可以实现多人聊天,并且效果和性能还算可以。而且每个客户端连接进服务器时,都会随机产生一个随机数作为自身的标志,避免通话过程中,分辨不清彼此,而导致交流效果不好。

    测试数据二:

    服务端运行截图:

    66ed502003c89ff287d2d8e056fa0907.png 

    a7ec17581b682c37767a6dba1523e4a6.png 

    客户端1程序运行截图:

    c2cc3898a94f5f3ee8e3057355a7f6be.png

    fd04d21d161c392f77737ca8fab4bf7e.png

    客户端2程序运行截图:

    1d0151910580924aaa18526653322cd6.png

    客户端3程序运行截图:

    06710f8f9f86d873dc123e682214884f.png

    客户端4程序运行截图:

    84a92af29e838ac42166239c173b32ca.png

    客户端5程序运行截图:

    72e6fad7c7000cb148767b937182671e.png

    客户端6程序运行截图:

    f3002c7b03249047e919b7912f19a66b.png

    客户端7程序运行截图:

    3a561753571a4ecab40e9650d2462d74.png

    客户端8程序运行截图:

    13dc7ed42a1b97fba221b0bc6359dcf1.png

    客户端9程序运行截图:

    88a617f0fc5dd503cdd4d16a08046953.png

    客户端10程序运行截图:

    169ea1bb459c2447adebf2f59b3863cc.png

    测试二一共连入了10个客户端进行程序稳定性的测试,程序运行结果稳定,符合实验预期结果,充分说明了程序的鲁棒性较强。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

    相关文章

    总结

    以上是编程之家为你收集整理的java编程实现多人聊天室功能全部内容,希望文章能够帮你解决java编程实现多人聊天室功能所遇到的程序开发问题。

    如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

    如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

    展开全文
  • 用nodejs实现聊天功能

    2017-09-26 11:26:23
     nickname:'pxzj.cn',msg:'pxzj一个神奇的网站' },{  nickname:'淘宝',msg:'我才是中国互联网老大' }]; //注册一个引擎html后缀的处理 app.engine('html',require('express-art-template')); //给art-...

    //html代码

     <!DOCTYPE html>
     <html lang="en">
     <head>
     <meta charset="UTF-8">
     <title></title>
     </head>
     <body>
     正在热聊中:<br/>
     <ul>
     {{each msgs}}
     <li>{{$value.nickname}}:{{$value.msg}}</li>
     {{/each}}
     </ul>
     <form method='post' action='/sendMsg'>
     昵称:<input type='text' name='nickname'><br/>
     您说:<input type='text' name='msg'>
     <input type='submit' name='' value='发送'>
     </form>
     </body>
     </html>

    //这是app.js的代码

    'use strict';

    const express = require('express');
    const app = express();
    const router = express.Router();
    const bodyParser = require('body-parser');


    //消息列表
    let msgs = [{
        nickname:'pxzj.cn',msg:'pxzj一个神奇的网站'
    },{
        nickname:'淘宝',msg:'我才是中国互联网老大'
    }];
    //注册一个引擎html后缀的处理
    app.engine('html',require('express-art-template'));
    //给art-template设置 debug:true
    app.set('view options',{
        debug:true
    });


    router.get('/',(req,res)=>{
        res.render('index.html',{
            msgs:msgs   //可以简写 msgs
        });//找views目录
    })
    .post('/sendMsg',(req,res)=>{
        //接收数据
        let formObj = req.body;
        let nickname = formObj.nickname;
        let msg = formObj.msg;
        //加入到数组中
        msgs.push({
            nickname,msg
        });


        //响应首页
        res.render('index.html',{
            msgs:msgs
        });
    })


    // parse application/x-www-form-urlencoded
    app.use(bodyParser.urlencoded({ extended: false }));


    // parse application/json
    app.use(bodyParser.json());
    //以上两个中间件为的是先挂载属性,再执行router路由req.body

    app.use(router);

    app.listen(8888);
    展开全文
  • 直播APP制作时即时聊天功能实现

    千次阅读 2019-09-16 15:13:59
    云豹直播作为优质的直播平台源码提供商,在即时聊天功能方面必有其独到之处,下面为大家从如何实现即时聊天这个功能上答疑解惑。 即时聊天这个需求在很多app中都有,也是公认的技术难点。因为大部分网站都普遍采用...
  • 导读热词最近研究了下Java socket通信基础,利用代码实现了一个简单的多人聊天功能,现把代码共享下,希望能帮到有兴趣了解的人。目录结构:ChatClient:package com.panda.chat;import java.awt.*;import java.awt...
  • 基于vue,websocket实现在线聊天功能

    千次阅读 2018-04-15 17:51:00
     最近项目中一直在使用vue作为前端框架,可是用到的只有很少一部分的功能,特别是vuex,为了更加深入了解vue框架,在工作之余开发了一款基于vue的在线聊天工具,一下是部分功能效果图 1.登录注册 2.添加...
  • 聊天发图片,发视频,频道聊天,好友聊天,通过websocket实现 spring boot zfoo rpc mongodb 4.2 zookeeper 3.6.1 前端: PWA,自适应页面 service worker实现 vue, vuetify 百度和google页面统计 数据库和资源: ...
  • springboot+websocket+mysql,实现实时聊天系统,简单demo。包括login 登录页、register 注册页、friend_list 好友列表、message_conver聊天视图 四个页面。
  • 之前在个人网站上预留了一个网页聊天室的功能,在这次寒假抽出了时间来完成。快速访问 简要记录一下网页聊天室的设计过程。 AJAX轮询 在设计之前一直纠结该使用何种方式来实现网页聊天室这个模块,最基本的想法是...
  • Python 基于wxpy库实现微信添加好友功能(简洁)更新时间:2019年11月29日 10:21:29 作者:帅鸽水煮鱼这篇文章主要介绍了Python 基于wxpy库实现微信添加好友功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值,...
  • java实现仿QQ即时聊天

    万次阅读 多人点赞 2018-12-31 14:57:05
    这是一个模仿QQ的即时聊天软件,可以通过运行在本地的服务端,实现两个客服端之间的通信,即聊天。采用的是javafx架构作为GUI设计架构,个人认为优点是可以自己设计css,使界面达到美观的目的。本项目共有登录、注册...
  • Web端即时聊天项目实现(基于WebSocket)

    万次阅读 多人点赞 2018-02-28 16:06:53
    Web端即时聊天项目实现 项目背景  其实这个项目算是我做过的花时间最长也投入心血最多的一个项目了,当时决定开始做这个的时候我几乎什么都不会,那时我个人的情况是: - JavaEE方面: 会jsp+servlet,也简单...
  • 最近做的APP中有一个新功能:已知用户微信号,可点击直接跳转到当前用户微信聊天窗口页面。
  • 代码: <a href='tencent://message/?uin=QQ号码'>加我扣扣</a> .. !..
  • 今天的主要内容就是用户加好友实现。简介加好友,大家用过QQ都知道,无非是发起好友申请,对方收到消息通知,然后处理。不过,本篇只讲前半部分,消息通知的处理留到下一篇去讲。因为内容有点多,怕是一时半会消化...
  • 随着互联网的飞速发展,网络聊天以其操作简单、方便快捷、私密性好等优点已经迅速发展成为最普遍的网络交流方式之一,越来越受到人们的青睐,因为它不但为人们提供了一种新的聊天方式,而且为人们提供了一种新的生活...
  • python实现微信聊天机器人

    万次阅读 多人点赞 2018-05-21 17:59:12
    python实现微信聊天机器人 具备基础:会编程就ok 电脑环境:已经安装过python,在命令行输入python能成功就行 在准备工作做完之后,就可以进入正式开发了,其实这个程序主要是使用了图灵机器人的接口,你...
  • python编写的PC端微信聊天机器人
  • 开源免费支持私有部署的聊天系统.--------------------------------------------------------企业办公OA、商业机密聊天,社交领域创业、客服系统、网站论坛社交转化等等需求,都没有一个良好的通用解决方案。...
  • 原创 [django项目] 如何在网站实现在线视频功能? ...
  • 今天我来实现一个简单的聊天室,后台用nodejs,客户端与服务端通信用socket.io,这是一个比较成熟的websocket框架.初始工作1.安装express,用这个来托管socket.io,以及静态页面,命令npm install express --save,--save...
  • Springboot+Freemark+Websocket+Mysql在线聊天聊天室系统是在Springboot脚手架的基础上实现的,想学习的可以去脚手架,脚手架是将基础管理系统公有的一些基本功能抽离出来,做成一个单独的可用系统。 开发环境要求...
  • 那么如何实现功能呢? 其实很简单:将下面一段代码添加到你自己需要放置的代码位置就可以实现该操作: http://wpa.qq.com/msgrd?v=1&uin=QQ号码&site=qq&menu=yes"> 注意:中间的图片标签 如果不需要有图片展示...
  • 最近碰巧发现一款比较好的Web即时通讯前端组件,layim,百度关键字即可,我下面要做的就是基于这个前端组件配合后台完成即时聊天功能。当然用到的技术就是ASP.NET SingalR框架。本人不会css和前端的东西,只会少量...
  • php+websocket+layIm实现即时通讯、单聊、群聊、分组等功能
  • 本系统采用了 B/S 体系结构,以 MySql 作为数据库管理数据,以 JSP 作为...仿QQ整合了一套完整的即时聊天功能,包含一对一聊天以及多对多群聊,往着美观大气用户体验高的方针,把分组、好友、群聊完美完整地呈现于主
  • 本系统是一款基于WebSocket 的多功能在线聊天网站,项目架构基于Springboot+Layui+Mybatis-Plus+Websocket实现,项目的主要功能分为用户登录、邮箱注册用户、好友聊天、好友添加、语音发送以及表情管理和图片上传等...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,619
精华内容 2,647
关键字:

网站好友聊天功能实现