문제

나는 어떻게 만들기에 대해 소켓 정책 파일을 서버에 있습니다.모든 음악을 듣 포트 843 문자열"<policy-file-request />"다음에 NULL 바이트로 다음 반환 XML 문자열(는 소켓을 정책 파일)입니다.

I haven't 코드의 이런 종류의 것 전도 모르는 어디서부터 시작합니다.나는 그것을 만들에 윈도우 서비스입니까?어떤 조언이나 링크를 환영합니다.

배경:

연락 웹 서비스에서 플래시 내가 사용하는'as3httpclient'라이브러리 대신 URLRequest/URLLoader.이 때문에 그것을 나에게 보낼 수 있는 기능을 사용자 정의 헤더를 GET 요청이 됩니다.이 라이브러리를 사용하여 낮은 수준의 소켓을 할당 물건입니다.

을 때 플래시 사용하여 낮은 수준의 소켓에 서버에 연결하는 소켓정책 파일이 필요에 의해 제공됩니다 소켓 정책 파일 서버입니다.

Socket 정책 파일에서 기사 Adobe

도움이 되었습니까?

해결책

몇 가지 주의해야 할 사용하여 귀하의 건물:

를 보내려고 시도하는 HTTP 요청을 통해 소켓

주로,당신은 당신이 필요하다는 것을 알고 있더라도 채팅할 수 있습 http 낮은 수준에서 소켓을 사용하여,많은 수의 경우 통신 이 패션에서 실패할 것이다.주로 이러한 오류가 발생한 경우 사용자는 프록시 서버를 사용하의 브라우저에 없기 때문에,효과적인 의미를 발견하고 이후에 사용하는 프록시를 통해 연결할 때 socket.

하기 위해서는 정책을 서버로 사용할 수 있습니다 용하여 tcplistener 클래스입니다.을 시작하는 것을 듣고 다음과 같다:

var tcpListener = new TcpListener(IPAddress.Any, 843 );
tcpListener.start();
tcpListener.BeginAcceptTcpClient(new AsyncCallback(NewClientHandler), null);

방법 NewClientHandler 의 형식은:

    private void NewClientHandler(IAsyncResult ar)
    {
        TcpClient tcpClient = tcpListener.EndAcceptTcpClient(ar);
        ...

어느 시점에서 수 있습을 공급하고 싶 tcpClient 체의 종류에 당신의 자신의 창조 처리의 유효성 검사에서 제공되는 데이터의 소켓에.나는 그것 RemoteClient.

에 RemoteClient,당신이 무언가가 다음과 같다:

    var buffer=new byte[BUFFER_SIZE];
    tcpClient.GetStream().BeginRead(buffer, 0, buffer.Length, Receive, null);

와 수신방법:

    private void Receive(IAsyncResult ar)
    {
        int bytesRead;
        try
        {
            bytesRead = tcpClient.GetStream().EndRead(ar);
        }
        catch (Exception e)
        {

            //something bad happened. Cleanup required
            return;
        }

        if (bytesRead != 0)
        {
            char[] charBuffer = utf8Encoding.GetChars(buffer, 0, bytesRead);
            try
            {
                tcpClient.GetStream().BeginRead(buffer, 0, buffer.Length, Receive, null);
            }
            catch (Exception e)
            {
                //something bad happened. Cleanup required
            }
        }
        else
        {
            //socket closed, I think?
            return;
        }
    }

일부를 보낼 방법:

    public void Send(XmlDocument doc)
    {
        Send(doc.OuterXml);
    }
    private void Send(String str)
    {

        Byte[] sendBuf = utf8Encoding.GetBytes(str);
        Send(sendBuf);
    }
    private void Send(Byte[] sendBuf)
    {
        try
        {
            tcpClient.GetStream().Write(sendBuf, 0, sendBuf.Length);
            tcpClient.GetStream().WriteByte(0);
            tcpClient.GetStream().WriteByte(13); //very important to terminate XmlSocket data in this way, otherwise Flash can't read it.

        }
        catch (Exception e)
        {
            //something bad happened. cleanup?
            return;
        }
    }

는 모든 중요한 세부 사항 나는 생각한다.내가 쓴 이 몇 시간 전에...수신 방법처럼 보이는 그것을 할 수 있으로 재 작업할 수 있지만,충분히 당신을 얻을 시작했다.

다른 팁

청취 소켓을 만듭니다.

연결이 열리면 수신을 수행하고 예상 문자열을 기다립니다. 수신되면 파일 내용을 보내고 소켓을 닫습니다.

이를 서비스로 랩핑하십시오 (낮은 권한 계정으로 실행).

대부분의 작업은 System.net.sockets.socket 클래스, 문서에는 샘플이 포함되어 있으며 API는 BSD 소켓 API와 매우 유사합니다 (대부분 BSD API에서 소켓으로 1 : 1 맵핑이 있으므로 모든 배경을 쉽게 번역 할 수 있어야합니다.

나는 Java와 C#과 함께이 작업을 수행해야했는데, 그것들은 상당히 비슷합니다.

당신은 볼 수 있습니다 Java 정책 파일.

일부 문제는이 답변에서 볼 수 있습니다. https://stackoverflow.com/a/12854204/1343667

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top