Я попробовал ICE, построив проект cpp hello world (сервер и клиент), и он работал отлично. Теперь у меня есть cpp сервер
Сервер
try
{
Ice::CommunicatorHolder ich(argc, argv);
auto adapter = ich->createObjectAdapterWithEndpoints("OnlineJudgeAdapter", "default -p 10000");
auto servant = make_shared<ComsI>();
adapter->add(servant, Ice::stringToIdentity("OnlineJudge"));
adapter->activate();
ich->waitForShutdown();
}
catch(const std::exception& e)
{
cerr << e.what() << endl;
return 1;
}
, который при компиляции и запуске кажется работающим. Я использую флаг --Ice.Trace.Network=2
, поэтому вижу сетевой трафик c.
Мой клиент находится в Javascript в браузере. Я следовал руководству, чтобы добраться до:
Клиент
try
{
const hostname = document.location.hostname || "127.0.0.1";
const proxy = communicator.stringToProxy(`OnlineJudge:ws -h 127.0.0.1 -p 10000`);
const judge = await OJMod
.ComsPrx
.checkedCast(proxy);
if (judge) {
await judge.listProblems();
} else {
$("#output").val("Invalid proxy");
}
} catch (ex) {
console.log("NOPE");
$("#output").val(ex.toString());
}
HTML
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ice/3.7.3/Ice.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ice/3.7.3/Glacier2.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ice/3.7.3/IceStorm.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ice/3.7.3/IceGrid.js"></script>
<script type="text/javascript" src="OnlineInterface.js"></script>
<script type="text/javascript" src="Client.js"></script>
Клиент csac.php
и работает с использованием: php -S localhost:8000/csac.php
Я получаю следующие ошибки
На клиенте:
::Ice::ConnectFailedException
ice_cause:
isTrusted: "true"
wasClean: "false"
code: "1006"
reason: ""
type: "close"
target:
URL: "ws://127.0.0.1:10000/"
url: "ws://127.0.0.1:10000/"
readyState: "3"
bufferedAmount: "0"
onerror: (null)
protocol: ""
extensions: ""
binaryType: "arraybuffer"
CONNECTING: "0"
OPEN: "1"
CLOSING: "2"
CLOSED: "3"
currentTarget: (recursive)
eventPhase: "2"
cancelBubble: "false"
bubbles: "false"
cancelable: "false"
defaultPrevented: "false"
composed: "false"
timeStamp: "4549"
srcElement: (recursive)
returnValue: "true"
NONE: "0"
CAPTURING_PHASE: "1"
AT_TARGET: "2"
BUBBLING_PHASE: "3"
line: "975"
column: "22"
sourceURL: "https://cdnjs.cloudflare.com/ajax/libs/ice/3.7.3/Ice.js"
error: "1006"
На сервере (из сетевой трассировки):
-- 03/31/20 15:06:36.123 ./judge: Network: trying to accept tcp connection
local address = ::ffff:127.0.0.1:10000
remote address = ::ffff:127.0.0.1:52339
-- 03/31/20 15:06:36.124 ./judge: Network: accepted tcp connection
local address = ::ffff:127.0.0.1:10000
remote address = ::ffff:127.0.0.1:52339
-- 03/31/20 15:06:36.124 ./judge: Network: closed tcp connection
local address = ::ffff:127.0.0.1:10000
remote address = ::ffff:127.0.0.1:52339
src/Ice/ConnectionI.cpp:1676: ::Ice::BadMagicException:
unknown magic number: 0x47, 0x45, 0x54, 0x20
Что такое исключение BadMagicException? Конфликт версий или передача строки прокси неправильно?