[英]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.