Показать сообщение отдельно
Старый 08.07.2011, 10:45
Elid вне форума Посмотреть профиль Отправить личное сообщение для Elid Найти все сообщения от Elid
  № 1  
Ответить с цитированием
Elid

Регистрация: Jul 2011
Сообщений: 1
По умолчанию Клиент AS3 сервер С# не соединяется.

Всем доброго времени суток.
Проблема в кратце: делаю клиент на АS3 а сервер на С#. Вообщем создаю сокет соединение и локально все хорошо соединяется. Но когда прописываю внешний IP соединение обрывается. Полазил в Нэте почитал понял что требуется файл политики. Как описано для этого Flash создает еще одно соединение чтобы получить его на порт 843 или с помощь функции Security.loadPolicyFile на любой порт.
Вот собственно клиент (вырезал почти все, оставил только то что должно соединять) и сервер.
как я понимаю Security.loadPolicyFile должна с меня потребовать файл политики т.е. прислать сообщение, но для этого хотя бы надо присоединится... чего я вообще не наблюдаю судя по логу, а только сокет соединение которое конечно же сразу отваливается.
Хотелось бы просто получить устойчивое соединение. Дальше с данными разберусь как нить
Програмирую не давно, не бить за сумбурность кода
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.*;
	import flash.text.*;
	import flash.net.Socket;
	import flash.system.Security;
 
	public class Main extends Sprite 
	{
		var soket:Socket;
		public function Main():void 
		{
			soket = new Socket();
			function onMouseDown(e:MouseEvent):void
			{
				soket.addEventListener(Event.CONNECT, conection);
				try 
				{
				 Security.loadPolicyFile("xmlsocket://46.38.28.183:843");
				 soket.connect( "46.38.28.183", 843);
				}
				catch(e:Error)
				{
				 trace(e);
				}
 
			}
		}
 
		function  conection(e:Event):void
		{
		}
 
 
	}
}
А это сервер
Main
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;

namespace SocketServer
{
    class Program
    {


        static void Main(string[] args)
        {
            IPHostEntry host = Dns.GetHostEntry("192.168.0.101");
            IPAddress ip = host.AddressList[0];
            TcpListener tcp = new TcpListener(ip,843);
            tcp.Start();
            Console.WriteLine("Ждем подключений...");
            while (true)
            {
                TcpClient ctcp = tcp.AcceptTcpClient();
                Console.WriteLine("Чего то приконектилось");
                ClientHandler cHandle = new ClientHandler();
                cHandle.clientSocket = ctcp;
                Thread cThread = new Thread(new ThreadStart(cHandle.RunClient));
                cThread.Start();
                           
            }


        }
    }
}
Класс ClientHandler
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets; 
using System.IO;  

namespace SocketServer
{
    class ClientHandler
    {

        public TcpClient clientSocket;
        private string readData;
        public void RunClient()
        {

            BinaryReader readSt = new BinaryReader(clientSocket.GetStream());
          //  NetworkStream writeSt = clientSocket.GetStream();
            while (true)
            {
                try
                {
                    readData = readSt.ReadString();// <---- здесь обрыв
                    Console.WriteLine(readData);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    break;
                                     
                }
            }

            clientSocket.Close();
        }

        
    }
}