2011-07-25 6 views
1

の間で循環ばかり。 ... ソケットがグローバルで宣言され、この関数によって呼び出される クライアントを以下のように、クライアントとサーバーのコードが見えます。私は、phpやC++のsocket.soでうまく動作するソケット用のサードパーティAPIを使用しています。確かにAPIベースのバグではありません。 Jparseが 係るサーバによって送信されたJSONを解析し、データをsocket.send(入力)を使用して送信される関数であるのNode.jsは、データは私が 「ネット」モジュールを用いた小型のNode.jsサーバーを書いた前後に、サーバーとクライアント

    function SocketAPI() 
      { 
       socket.onConnect = function(success) 
       { 
        if(success) 
        { 
         Connected = true; 
        }else{ 
         alert("Failed to connect to server!"); 
        } 
       } 
       socket.onClose = function() 
       { 
        alert("Connection lost to server!"); 
       } 
       socket.onData = function(text) 
       { 
        if(text==">Send_AuthenTication") 
        { // Tells the client to send authentication data 
         if(localStorage.ID) 
         { 
          socket.send(">"+localStorage.ID); //encrypted 
         }else{ 
          socket.send("<"); 
         } 

        }else if(text.substr(0,2)==">>"){ 
         // User inforamation accept and apply it 
         Packet = JSON.parse(text.substr(2,text.length-2)); 
         while(Users.length){ // users is an array which contains other peers connected to the server 
         Users.pop(); 
         } 
         me = Packet; 
          me.Prepare(); 
         Users.push(me.NameBOX); 
         Usrlst.ShowTab(0); 
         // Now make the socket only listen for output buffer. 
         socket.onData = function(Data){ 
          //alert(Data); 
          setTimeout(Jparse,100, Data); 
         } 
        } 

       } 
       socket.connect('localhost',1337);// makes connection 
      } 

とサーバーは、次のようになります::

..

var server = net.createServer(function(socket){ 
socket.setEncoding('utf8'); 
socket.Peer = new Client(); 

socket.on('data',function(Data){ 
    if(Data[0]==">") // this tells that the request is authentication event 
    { 
    // Loads from Pool 
    }else if(Data[0]=="<"){ 
     NewUSER(this.Peer); // Makes new user 
    } 
    this.write(">>"+JSON.stringify(this.Peer)+"\0","utf8",function(){}); 
    this.on('data',function(Data){ 
     console.log(Data); 
     this.write(Data,'utf8',function(){}); 
    }); 
}); 
socket.on('end',function(){ 
    console.log("Connection End"); 
}); 
// Socket Closed by client/errors 
socket.on('close',function(error){ 
    console.log("Connection is closed by Had errors?:"+error); 
}); 
// Handshake started 
socket.on("connect",function() 
{ // add server connection in here aha we now have a new user. 
    sys.puts("Connection from"+ socket.remoteAddress); 
    this.write(">Send_AuthenTication\0",'utf8',function(){}); 
}); 

    }); 
// starting the server. 
server.listen(1337,"localhost"); 

私はクライアントのHTMLページにデータを使用してデータを送信し、サーバーに行くと、そのはになって戻ってくるが、プロセスになります再発と私は

が言う..同じiは、サーバとクライアントを意味両側に、その後もう一度受け取っ得ます。私が "hello"をクライアントから送信すると、サーバーからクライアント側に2〜3回 "hello"が返ってきます。ちょうど気付いたのは、データをサーバーに送信するたびに増加するrecurrsionsの数です。

誰もがいただきました!間違ったの手掛かりを得ましたか。

+0

ではなく、直接イベントに – ShrekOverflow

答えて

2

あなたが外on('data' ...を実行するひとつひとつの時間は、あなたが別のon('data' ...の要素を追加しています。そのため、リクエストごとに増加した数値が得られています。ハンドラ構造を変更して、ハンドラにハンドラを追加しています。

+0

Oを変更するのであれば..バグが原因つの認証が完了すると、サーバーとクライアントの両方にonDataハンドラのイベントを変更する私の悪いコードの練習に原因なっている可能性私が使用するものです。私は(data、function(){})が外側のデータを置き換えると思いますが、間違っていました。... hmmm soundz intresting。 – ShrekOverflow

+0

ありがとうございました..働いています...:D:D:D:D:D私はあなたの答えを投票することができたらいいですか.. – ShrekOverflow

関連する問題