【发布时间】:2015-09-20 18:53:36
【问题描述】:
我正在使用 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 for URL http://yoshi.dynu.com:3000/socket.io/1/。
因此,当通过浏览器连接到http://yoshi.dynu.com:3000/socket.io/1/ 时,我会收到响应。
服务器通过 nodejs 使用以下 javascript 运行:
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 天让这个应用程序运行但没有成功:/
【问题讨论】: