处理Flex在C#服务器中触发的http

本文关键字:http 服务器 Flex 处理 | 更新日期: 2023-09-27 18:21:17

嗨,我正试图从Flex向C#服务器发送一条简单的HTTP消息,但似乎收到了两个调用,第一个是真实调用,第二个是空调用。

为什么会这样,我该如何处理?

这是我的C#代码:

TcpListener listener = new TcpListener(IPAddress.Any, 9400);
listener.Start();
Console.WriteLine("Server started");
Socket client;
while (true)
{
    client = listener.AcceptSocket();
    // client.Available is an expensive call so it's just for testing
    Console.WriteLine("Client accepted " + client.Connected + " " + client.Available);
    SocketHandler handler = new SocketHandler();
    ThreadPool.QueueUserWorkItem(handler.handleSocket, client);
} 

这是SocketHandler:

public void handleSocket(object socketObjeck)
{
    try
    {
        socket = (Socket)socketObjeck;
        byte[] buffer = new byte[1024];
        SocketSettings.setSocket(socket);
        //blocker...
        try
        {
            socket.Receive(buffer);
        }
        catch (Exception e)
        {
            Console.WriteLine("Error'nFaild reading from socket'n" + e.Message);
            socket.Close();
            return;
        }
        parseData(buffer);
        socket.Close(3);
    }
    catch (Exception e)
    {
        Console.WriteLine("Error'nError 'n" + e.Message + "'n" + e.StackTrace);
    }
}

这是我的弹性代码:

var request:URLRequest = new URLRequest();
request.data = "Hello from flex";
request.url = URL;
request.method = URLRequestMethod.POST;
loader.load(request);

我总是接到两个电话。线路:

Console.WriteLine("Client accepted " + client.Connected + " " + client.Available);

打了两次电话。我错过了什么?

编辑1:我可以肯定地告诉你,第二个调用是空的,甚至在chrome JavaScript控制台中都看不到,这就像flex打开连接,等待一些响应,或者我不知道是什么。。。但它不发送任何数据。

编辑2:

我一直在尝试发送一个真正的HTTP响应通知另一件事,第二个调用即将到来,而无需等待第一个调用,如果我将响应线程置于短睡眠状态(在测试中为100毫秒),那么我在能够响应第一个调用之前就得到了第二个呼叫。

第S页使用Flex 4.6,Visual Studio 2010

处理Flex在C#服务器中触发的http

正如@Spender所提到的,在不知道调用是什么的情况下,很难知道调用的原因是什么。

但是,假设您使用URLRequest进行通信,则第一个调用可能是对crossdomain.xml文件的请求,该文件必须存在,才能使flash播放器与服务器进行通信。

其他协议具有不同的初始化调用(例如,RemoteObjectNetConnection将发送初始调用来设置本地FlexClientId,SocketServer将在特定端口上调用crossdomain.xml。)

这个故事的寓意是:在你做出回应之前,你需要检查请求的内容。

我看到两点:

  • crossdomain.xml必须在服务器端才能从客户端工作

  • 在服务器端使用HttpListener而不是TcpListener,这将使您的代码更加健壮,因为它实现了所有的http协议细节,并允许您专注于"真正的工作"

请询问您是否需要进一步的详细信息/样品等。

毕竟它是跨域请求。如果你没有在www文件夹中添加跨域文件,flex会向你发送一条空消息(如果你试图用跨域响应此消息,它需要工作)。