Основной сокет-сервер

так что я пытаюсь сделать, это понять, как работают сокеты и как сделать простой сервер для связи между сервером и клиентским приложением

Я попытался сделать это, используя AS3 с проектом под названием Red Tamarin (запускает код AS3 на консоли, но в данный момент это не имеет большого значения)

Мне удалось создать базовый сервер, это функциональность в основном это:

  • создает сокет и активирует его на нем: listen (), accept (). когда он принимает, он также добавляет новый сокет, полученный от accept (), к массиву соединений.
  • цикл for, который выполняется в соответствии с длиной массива соединений и запускает receive () для каждого сокета (я не вызывал listen () / accept () для этих соединений, не так ли?)

Мое приложение Actionscript 3 успешно подключается к серверу,
И затем для целей тестирования я решил писать () на сервер с клиента без остановок, просто чтобы убедиться, что сервер действительно получает данные, чтобы я мог пойти дальше и добавить больше функциональности.

Но сервер, кажется, не получает никакой дополнительной информации вообще ..
Кажется, что он отвечает только на соединение / разъединение, но не слушает между ними какую-либо другую информацию.

Я знаю, что показывать мой код было бы лучше, но сейчас я хотел бы знать, правильно ли я подхожу к этому, я читал об этом в Интернете, и кажется, что я, но я пришел сюда просто, чтобы убедиться …

Заранее спасибо!

РЕДАКТИРОВАТЬ:
Мне было предложено для некоторого моего кода, вот он, ну, по крайней мере, наиболее важные части

private var _connections:Array;
private var _socket:Socket;
private var _server:Client;
private var _running:Boolean;
private var _port:uint;
private var _address:String;

public function Server(address:String, port:uint)
{
_connections = [];
_address = address;
_port = port;
_running = false;
_socket = new Socket();

}
public function start():void {
_socket.bind(_port, _address);
_socket.listen(128);
_running = true;
_server = new Client(_socket);
_addClient(_server);
_start();
}
private function _start():void {
while (_running) {
_loop();
}
}
private function _addClient(client:Client):void {
_connections.push(client);
}
public function _loop():void
{
var i:uint;
var selected:Client;
var newconn:Socket;
for (i = 0; i < _connections.length; i++ ) {
selected = _connections[i];
if (selected.hasData()) {
if (selected == _server) {

//accept a new client connection
newconn = _socket.accept();
if (!newconn.valid){
//Invalid.
}
else {
//Add a new client
_addClient(new Client(newconn));
}
} else {
//Read data from clients
selected._socket.receive();
}

}

}

}

1

Решение

Просто чтобы ответить на ваш вопрос listen () / accept (), вам нужно вызывать listen () только один раз, когда сервер изначально настроен. После этого вам нужно будет выполнять accept () для каждого нового клиентского соединения, которое вы хотите установить (поскольку accept () вернет дескриптор файла сокета, который обрабатывает нового клиента).

После того, как клиент будет принят () ed, вы будете использовать дескриптор файла сокета клиента для получения () или отправки () любых данных.

1

Другие решения

посмотрите на этот пример
https://code.google.com/p/spitfire-and-firedrop/source/browse/trunk/socketpolicyd/src/spitfire/SocketPolicyServer.as

в вашем основном цикле из того, что я вижу в вашем коде, вы только проверяете, можете ли вы читать текущий сокет, вам также нужно проверить, можете ли вы записать в текущий сокет

также обратите внимание, что у каждого есть дескриптор сокета, сервер и клиенты

я предполагаю, что вы немного запутались между классами Server и Client, которые оба обертывают объект Socket, пытаясь использовать только объекты Socket (как в примере выше)
и когда вы понимаете это, тогда вы можете пойти дальше и абстрагировать / структурировать большие классы

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector