所以我要做的是了解套接字是如何工作的,以及如何制作一个简单的服务器来在服务器和客户端应用程序之间进行通信
我尝试使用 AS3 和名为 Red Tamarin 的项目来完成此操作(在控制台上运行 AS3 代码,但目前并不重要)
我设法创建了一个基本服务器,它的功能基本上是这样的:
- 创建一个套接字并在其上激活这些:listen()、accept()。当它接受时,它还将从 accept() 接收到的新套接字添加到连接数组中。
- 一个根据连接数组的长度运行并在每个套接字上运行 receive() 的 for 循环(我没有在这些连接上调用 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();
}
}
}
}