Flash Socket已连接,但未发送数据

时间:2012-03-29 21:00:50

标签: c# flash sockets

我正在使用客户端/服务器应用程序,我的客户端是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

套接字连接仍然是连接的,它没有断开,但它没有发送和数据到服务器

1 个答案:

答案 0 :(得分: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();