2012-03-29 7 views
2

클라이언트/서버 응용 프로그램을 작동 중입니다. 클라이언트가 Flash이고 서버가 C#입니다.플래시 소켓이 연결되었지만 데이터를 전송하지 않습니다.

나는 서버에 연결되어 지금까지 아무런 문제없이 첫 번째 데이터를 보내지 만 두 번째 데이터를 보낼 때 아무 데이터도 보내지 않고 아무런 조치도 취하지 않습니다. 이 문제를 해결하기 위해 무엇을 할 수 있습니까?

서버 :

private void OnDataReceived(IAsyncResult asyn) 
    { 
     OyuncuSoketi socketData = (OyuncuSoketi)asyn.AsyncState; 

     int iRx = 0; 
     // Complete the BeginReceive() asynchronous call by EndReceive() method 
     // which will return the number of characters written to the stream 
     // by the client 
     iRx = socketData.m_currentSocket.EndReceive(asyn); 
     char[] chars = new char[iRx + 1]; 
     System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder(); 
     int charLen = d.GetChars(socketData.dataBuffer, 0, iRx, chars, 0); 
     String data = new String(chars); 
     if (data.IndexOf("policy-file-request") != -1) 
     { 
      LST_LOG.Items.Add(" Flash Player Policy File İstendi"); 
      LST_LOG.Items.Add(" Policy File Gönderiliyor"); 
      try 
      { 
       Policyfilegonder(socketData.m_currentSocket); 
       LST_LOG.Items.Add(" Policy File Gönderildi"); 
       LST_LOG.Items.Add("Oyuncu Baglandi " + DateTime.Now.ToString()); 
      } 
      catch 
      { 
       LST_LOG.Items.Add(" !!!Policy File Gönderilemedi!!!"); 
       LST_LOG.Items.Add(" !!!Oyuncu Baglantisi basarisiz!!! " +   DateTime.Now.ToString()); 
      } 
     } 
     else 
     { 
      string[] gelen_bilgi; 
      data.Replace("\0", ""); 
      gelen_bilgi = data.Split('_'); 
      switch (gelen_bilgi[0]) 
      { 
       case "\0": LST_LOG.Items.Add("Oyuncu Baglantısı koptu" + DateTime.Now.ToString()); 
        break; 
       case "OYUNAGIRIS": socketData.Id = Convert.ToInt32(gelen_bilgi[1]); SocketList.Add(socketData); LST_LOG.Items.Add("Oyuna Giris"); socketData.m_currentSocket.Send(System.Text.Encoding.Default.GetBytes("Kabul\0")); 
        break; 
       case "ODAYAGIRIS": socketData.Oda = Convert.ToInt32(gelen_bilgi[1]); 
            LST_LOG.Items.Add("Oyuncu " + Convert.ToInt32(gelen_bilgi[1]) + " Nolu Odaya Girdi"); 
        break; 
       case "ODADANCIKIS": LST_LOG.Items.Add("Oyuncu " + Convert.ToInt32(socketData.Oda) + " Nolu Odadan Çıktı"); 
            socketData.Oda = -1; 
        break; 
       case "SALONAGIRIS": MessageBox.Show("Salona Girildi"); 
            //socketData.Salon = Convert.ToInt32(gelen_bilgi[1]); 
            // LST_LOG.Items.Add("Oyuncu " + Convert.ToInt32(gelen_bilgi[1]) + " Nolu Salona Girdi"); 
        break; 
       case "SALONDANCIKIS": LST_LOG.Items.Add("Oyuncu " + Convert.ToInt32(socketData.Salon) + " Nolu Salondan Çıktı"); 
             socketData.Salon = -1; 
        break; 
       default: 
        break; 
      } 
     } 
    } 

    private void WaitForData(Socket soc) 
    { 

     if (pfnWorkerCallBack == null) 
     { 
      // Specify the call back function which is to be 
      // invoked when there is any write activity by the 
      // connected client 
      pfnWorkerCallBack = new AsyncCallback(OnDataReceived); 
     } 

     OyuncuSoketi packet = new OyuncuSoketi(); 
     packet.m_currentSocket = soc; 
     // Start receiving any data written by the connected client 
     // asynchronously 
     soc.BeginReceive(packet.dataBuffer, 0, packet.dataBuffer.Length, SocketFlags.None, pfnWorkerCallBack, packet); 

    } 

클라이언트 :

 private function onConnect(e:Event){ 
      if(fl_socket.connected){ 
      durum_bilgisi.text = "Sunucuya Baglanildi " + e; 
      fl_socket.writeMultiByte("OYUNAGIRIS_"+FBuid.toString()+"_"+String.fromCharCode(0),"UTF8"); 
//This data is sending to server by the client 
      fl_socket.flush(); 
      }else{ 
      durum_bilgisi.text = "Baglantida Hata olustu " + e ; 
      } 
     } 

// 

    private function salonaGir(e:ListEvent):void{ 

     var o:Object = e.item; 
     girilenSalon = o.No; 
     girilenSalon--; 
     fl_socket.writeMultiByte("SALONAGIRIS_"+girilenSalon.toString()+"_"+FBuid.toString()+"_"+String.fromCharCode(0),"UTF8"); // but this data is not sent :(
     fl_socket.flush(); 
     gotoAndStop(2); 
     OdalariGetir(); 
    }//salonaGir Sonu 

소켓 연결이 여전히 연결의 연결이 끊어되지하지만이 소켓 서버에

+0

코드 샘플을 보내 데이터되지 않는다 섬기는 사람? – Odys

+0

@odyodyodys 내 코드를 추가했습니다. –

+0

아직 해결책을 찾았습니까? 여기에 게시하면 도움이 될 것입니다. – EnKrypt

답변

0
NetworkStream ns = clientTCP.GetStream(); 
StreamWriter sw = new StreamWriter(ns); 
sw.WriteLine("<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\"/></cross-domain-policy>\0"); 
sw.Close(); 
관련 문제