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
소켓 연결이 여전히 연결의 연결이 끊어되지하지만이 소켓 서버에
코드 샘플을 보내 데이터되지 않는다 섬기는 사람? – Odys
@odyodyodys 내 코드를 추가했습니다. –
아직 해결책을 찾았습니까? 여기에 게시하면 도움이 될 것입니다. – EnKrypt