繁体   English   中英

使用Socket.io的Java应用程序

[英]Java Application using Socket.io

我正在使用socket.io在我的网站上聊天。 我还喜欢编写一个小型Java应用程序作为此聊天的独立版本。

虽然使用javascript的网站运行良好,但我无法使Java应用程序正常工作。

网站聊天看起来像这样:

codepen.io/dreadkopp/pen/zvqEXB

Java应用程序现在看起来像这样:

package chat;

import io.socket.IOAcknowledge;
import io.socket.IOCallback;
import io.socket.SocketIO;
import io.socket.SocketIOException;

import java.net.MalformedURLException;

import org.json.JSONException;
import org.json.JSONObject;

public class chat {


    public static void main(String[] args ) throws MalformedURLException{


        String url = "http://yoshi.dynu.com:3000";
        SocketIO socket = new SocketIO();

        socket.connect(url , new IOCallback() {
            @Override
            public void onMessage(JSONObject json, IOAcknowledge ack) {
                try {
                    System.out.println("Server said:" + json.toString(2));
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onMessage(String data, IOAcknowledge ack) {
                System.out.println("Server said: " + data);
            }

            @Override
            public void onError(SocketIOException socketIOException) {
                System.out.println("an Error occured");
                socketIOException.printStackTrace();
            }

            @Override
            public void onDisconnect() {
                System.out.println("Connection terminated.");
            }

            @Override
            public void onConnect() {
                System.out.println("Connection established");
            }

            @Override
            public void on(String event, IOAcknowledge ack, Object... args) {
                System.out.println("Server triggered event '" + event + "'");
            }
        });

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        socket.emit("chat message", "test");
    }
}

使用此.jar:github.com/Gottox/socket.io-java-client

运行本程序时,出现“握手错误”,服务器http响应代码:400表示URL http://yoshi.dynu.com:3000/socket.io/1/

因此,当通过浏览器连接到http://yoshi.dynu.com:3000/socket.io/1/时 ,我会得到响应。

服务器通过使用以下javascript的nodejs运行:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);



io.on('connection', function(socket){
  socket.on('chat message', function(msg){

        var parts = new Array(2);
        parts = msg.split("ID: ");
        var ID = parts[1];
        msg = parts[0];


        console.log('incomming message from ' + ID + ': ' + msg);
        io.emit('who', ID);
        if (ID != "support") {
        io.emit('support' + ' message', msg);
        console.log('sent to support: ' + msg);
        io.emit(ID + ' message', msg);
        console.log('sent to ' + ID + ' :' + msg);
        }

        if (ID == "support") {
        var temp = new Array(2);
        temp  = msg.split(":");
        target = temp[0];
        targetmsg = msg.slice(msg.indexOf(":"));
        targetmsg = targetmsg.slice(targetmsg.indexOf(" "));    


        io.emit(ID + ' message', msg);
        console.log('sent to ' + ID + ': ' + msg);
        io.emit(target + ' message', targetmsg);
        console.log('sent to ' + target + ': ' + targetmsg);
        }
  });
});


http.listen(3000, function(){
  console.log('listening on port 3000 \n' + 'awaiting messages and files...');
});

io.on('connection', function(socket){
  console.log('a user connected');
});

有人知道为什么它不起作用吗? 我正在尝试2天,以使该应用程序运行,但没有成功:/

您的Java代码正确; 我复制并为我工作。 也许您的网址var是错误的。 这是我的nodejs服务器代码:

var express = require("express"),
    http = require("http"),
    app = express(),
    server = http.createServer(app),
    path = require('path');
var bodyParser = require('body-parser');
var oracledb = require('oracledb');
var SimpleOracleDB = require('simple-oracledb');
SimpleOracleDB.extend(oracledb);
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, 'public')));
app.set("views", __dirname + "/public");
app.configure(function () {
app.use(express.static(__dirname));
 });
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'ejs');

app.get("/pedidosNotificaciones", function (req, res) {
res.render("index1.html", {title: "pedidosNotificaciones"});
        });
  //app.get('/', function (req, res) {
     //  res.sendfile(__dirname + '/index1.html');
   //});

server.listen(3004);
console.log("Notificaciones servidor en el puerto 3004");

//PRODUCCION
var connAttrs = {
user: "xxxx",
password: "xxxx",
connectString: "xxxxxx"

  };
    /* 
     var connectData110 = {
      user: "xxxx",
       password: "xxxx",
       connectString: "//10.21.80.110:1521/BDname"
      };

       */
 var io = require("socket.io").listen(server);
  io.sockets.on('connection', function (socket) {
   socket.on('hayCambioDeEstatus', function () {
    console.log("abrio un cliente....");
    socket.emit("NotificacionDeCambio", "1");
    socket.broadcast.emit("NotificacionDeCambio", "1");
   });
  socket.on('fugasRegistradas', function (idCuenta) {
    var uno=0;
    oracledb.getConnection(connAttrs, function (err, connection) {      
        if (err) {              
              console.log("Error al conectar con la BD....");
              uno=1;
            return;
        }
        connection.execute("SELECT FU.IDFUGA,U.NOMBRE AS                             LEVANTO,ES.DESCRIPCION ESTATUS,FU.FECHAREGISTRO,"
                + " FU.HORAENVIO,FU.HORACONFIRMADO,"
                + " FU.REPORTA,FU.TELEFONOREPORTA,FU.OBSERVACIONES,CA.CANAL"
                + " FROM FG_FUGAS FU"
                + " INNER JOIN CT_CANALES CA ON CA.IDCANAL=FU.IDCANAL"
                + " INNER JOIN CT_ESTATUS ES ON ES.IDESTATUS=FU.IDESTATUS"
                + " INNER JOIN SG_USUARIOS U ON U.IDUSUARIO=FU.IDUSUARIO"
                + "  WHERE IDCUENTA="+idCuenta, {}, {
            outFormat: oracledb.OBJECT 
        }, function (err, result) {
            if (err) {
                  console.log("ERROR...EN LA CONSULTA.");
            } else {
              // console.log(result.rows);             
                socket.emit('registro', result.rows);
            }
                connection.release(       function (err) {
                        if (err) {
                            console.error(err.message);
                        } else {
                            console.log("fugasRegistradas.... Conexion        liberada");
                        }
                    });
        });
    });             
  });

   socket.on('folioAlternativo', function () {
    var uno=0;
    oracledb.getConnection(connAttrs, function (err, connection) {      
        if (err) {              
              console.log("Error al conectar con la BD....");
              uno=1;
            return;
        }
        connection.execute("SELECT SUBSTR(MAX(FOLIOSERVICIO),1,5) AS    ALTERNATIVO FROM FG_TERMINADAS WHERE FOLIOSERVICIO >= '50000'", {}, {
            outFormat: oracledb.OBJECT 
        }, function (err, result) {
            if (err) {
                  console.log("ERROR...EN LA CONSULTA.");
            } else {
                console.log(result.rows);             
                socket.emit('ultimo', result.rows);
            }
                connection.release(       function (err) {
                        if (err) {
                            console.error(err.message);
                        } else {
                            console.log("folioAlternativo.... Conexion   liberada");
                        }
                    });
        });
      });             
    });

     });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM