none
유니버셜앱 예외 발생: 'System.UnauthorizedAccessException' 해결방법 RRS feed

  • 질문

  • 소켓 프로그래밍 시도중 일단 에코서버로 시도해보고 있는데요 계속 예외 발생되어서 try를 무시해버리네요

    어떤 문제떄문에 예외가 발생하는지 알고 싶습니다.

    namespace echo_Server
    {

        /// <summary>
        /// 자체에서 사용하거나 프레임 내에서 탐색할 수 있는 빈 페이지입니다.
        /// </summary>
        public sealed partial class MainPage : Page
        {
           
            public MainPage()
            {
               
                this.InitializeComponent();
                acho_sever();
                achoclient();
              
            }
            private async void acho_sever()
            {
                try
                {
                    //Create a StreamSocketListener to start listening for TCP connections.
                    Windows.Networking.Sockets.StreamSocketListener socketListener = new Windows.Networking.Sockets.StreamSocketListener();

                    //Hook up an event handler to call when connections are received.
                    socketListener.ConnectionReceived += SocketListener_ConnectionReceived;

                    //Start listening for incoming TCP connections on the specified port. You can specify any port that's not currently in use.
                    await socketListener.BindServiceNameAsync("1337");
                    this.textBox.Text = "GoodBye";
                }
                catch (Exception e)
                {
                    //Handle exception.
                   
                }

            }
            private async void SocketListener_ConnectionReceived(Windows.Networking.Sockets.StreamSocketListener sender,
        Windows.Networking.Sockets.StreamSocketListenerConnectionReceivedEventArgs args)
            {
                //Read line from the remote client.
                Stream inStream = args.Socket.InputStream.AsStreamForRead();
                StreamReader reader = new StreamReader(inStream);
                string request = await reader.ReadLineAsync();

                //Send the line back to the remote client.
                Stream outStream = args.Socket.OutputStream.AsStreamForWrite();
                StreamWriter writer = new StreamWriter(outStream);
                await writer.WriteLineAsync(request);
                await writer.FlushAsync();
            }
            private async void achoclient()
            {
                try
                {
                    //Create the StreamSocket and establish a connection to the echo server.
                    Windows.Networking.Sockets.StreamSocket socket = new Windows.Networking.Sockets.StreamSocket();

                    //The server hostname that we will be establishing a connection to. We will be running the server and client locally,
                    //so we will use localhost as the hostname.
                    Windows.Networking.HostName serverHost = new Windows.Networking.HostName("localhost");

                    //Every protocol typically has a standard port number. For example HTTP is typically 80, FTP is 20 and 21, etc.
                    //For the echo server/client application we will use a random port 1337.
                    string serverPort = "1337";
                    await socket.ConnectAsync(serverHost, serverPort);

                    //Write data to the echo server.
                    Stream streamOut = socket.OutputStream.AsStreamForWrite();
                    StreamWriter writer = new StreamWriter(streamOut);
                    string request = "test";
                    await writer.WriteLineAsync(request);
                    await writer.FlushAsync();

                    //Read data from the echo server.
                    Stream streamIn = socket.InputStream.AsStreamForRead();
                    StreamReader reader = new StreamReader(streamIn);
                    string response = await reader.ReadLineAsync();

                }
                catch (Exception e)
                {
                    //Handle exception here.           
                }
            }
        }
    }

    2015년 12월 2일 수요일 오전 5:34

답변

  • 윈도우 폰이나 UWP를 위한 앱들은 대부분 자신이 필요로 하는 기능을 명시해야 합니다. 그리고 그 앱을 사용자가 다운로드 받으면 이 앱이 어떤 기능들이 요구되는지 알수 있게 되고 그것을 허락할지를 결정할 수 있는 기회를 갖게 됩니다.

    How to specify capabilities in a package manifest
    ; https://msdn.microsoft.com/en-us/library/windows/apps/br211477.aspx

    Capability
    ; https://msdn.microsoft.com/en-us/library/windows/apps/br211423.aspx

    위의 2개 문서를 보시고 internetClientServer 권한을 manifest에 추가하시면 됩니다.

    • 답변으로 표시됨 musicbox3 2015년 12월 3일 목요일 오전 12:57
    2015년 12월 3일 목요일 오전 12:46
  • 당연히 문제가 있다는 것입니다. ^^

    try/catch로 처리되지 않은 코드 중에서 예외가 발생했고, 현재 Visual Studio와 같은 디버거가 연결된 상태이기 때문에 그 부분의 코드로 진입해 Break로 알린 것입니다. (만약 디버거가 붙어있지 않다면 그냥 비정상 종료합니다.)

    관련해서 다음의 2개 글을 읽어보세요. 도움이 될 것입니다.

    First-Chance Exception
    ; http://www.sysnet.pe.kr/2/0/510

    WPF - XamlParseException 대응 방법
    ; http://www.sysnet.pe.kr/2/0/622

    • 답변으로 표시됨 musicbox3 2015년 12월 3일 목요일 오전 2:54
    2015년 12월 3일 목요일 오전 2:39

모든 응답

  • 윈도우 폰이나 UWP를 위한 앱들은 대부분 자신이 필요로 하는 기능을 명시해야 합니다. 그리고 그 앱을 사용자가 다운로드 받으면 이 앱이 어떤 기능들이 요구되는지 알수 있게 되고 그것을 허락할지를 결정할 수 있는 기회를 갖게 됩니다.

    How to specify capabilities in a package manifest
    ; https://msdn.microsoft.com/en-us/library/windows/apps/br211477.aspx

    Capability
    ; https://msdn.microsoft.com/en-us/library/windows/apps/br211423.aspx

    위의 2개 문서를 보시고 internetClientServer 권한을 manifest에 추가하시면 됩니다.

    • 답변으로 표시됨 musicbox3 2015년 12월 3일 목요일 오전 12:57
    2015년 12월 3일 목요일 오전 12:46
  • 감사합니다. manifest에서 권한을 수정하니까 되네요

    근데 #if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
                UnhandledException += (sender, e) =>
                {
                    if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break();
                }; 실행하면 이 코드에서 global::System.Diagnostics.Debugger.Break(); 이부분이 노란색으로 표시되면서            

    COMException: Error HRESULT E_FAIL has been returned from a call to a COM component 이 메세지가 뜨는데  혹시 저 노란 메세지가 뭔가 문제가 있다는 건가요?

    2015년 12월 3일 목요일 오전 2:15
  • 당연히 문제가 있다는 것입니다. ^^

    try/catch로 처리되지 않은 코드 중에서 예외가 발생했고, 현재 Visual Studio와 같은 디버거가 연결된 상태이기 때문에 그 부분의 코드로 진입해 Break로 알린 것입니다. (만약 디버거가 붙어있지 않다면 그냥 비정상 종료합니다.)

    관련해서 다음의 2개 글을 읽어보세요. 도움이 될 것입니다.

    First-Chance Exception
    ; http://www.sysnet.pe.kr/2/0/510

    WPF - XamlParseException 대응 방법
    ; http://www.sysnet.pe.kr/2/0/622

    • 답변으로 표시됨 musicbox3 2015년 12월 3일 목요일 오전 2:54
    2015년 12월 3일 목요일 오전 2:39
  • 늘 답변 감사합니다.

    성함이 익숙해서 확인해보니

    제가 최근 공부하려고 구입한 C#6.0 저자셨네요

    책 잘보고 있습니다. 감사합니다.

    2015년 12월 3일 목요일 오전 3:25