Microsoft MVP성태의 닷넷 이야기
글쓴 사람
Sungwoo Park (musicbox3 at nate.com)
홈페이지
첨부 파일
 

계속 시도 해 보았는데요. async에 await 대해 공부하고 어떤 방식으로 작용하는지 또 왜 써야 하는지는 알겠습니다.

그런데 어떻게 써야 할지 또 어디에서 어떤 메소드에 적용해야 할지 모르겠습니다.

신호를 주기적으로 보내다가 신호를 받을때 잠시 멈춰 신호를 받고 다시 신호를 보내고 싶은데 잘 안되네요.

현재 제가 작업한 소스입니다. 근데 생각한대로 안돼고 있습니다.

어디다가 async await를 적용해야 할까요? 또 async await를 어떻게 공부하면 좋을지도 모르겠습니다. 책도 보고 구글링도 해보지만 아무래도 어렵습니다.

namespace L_Server
{

    public sealed partial class MainPage : Page
    {
        
         public MainPage()
        {
            this.InitializeComponent();
            echo_server();
            DispatcherTimerSetup();
        }
              private async void echo_server()
        {
            try
            {
                //TCP 접속을 대기 시작하는 StreamSocketlistener를 만든다.
                Windows.Networking.Sockets.StreamSocketListener socketListener = new Windows.Networking.Sockets.StreamSocketListener();
                //연결이 수신 될 때 호출하는 이벤트 핸들러를 연결
                socketListener.ConnectionReceived += SocketListener_ConnectionReceived;
                
                // String a = socketListener.BindEndpointAsync(HostName localhost, String local);
                //지정된 포트에 들어오는 TCP 접속을 대기 시작. 현재 사용하는 모든 포트를 지정할 수 있다.
                await socketListener.BindServiceNameAsync("1337");
            }
            catch (Exception e)
            {
                //Handle exception.
            }

        }
        private async void SocketListener_ConnectionReceived(Windows.Networking.Sockets.StreamSocketListener sender,
    Windows.Networking.Sockets.StreamSocketListenerConnectionReceivedEventArgs args)
        {
            //원격 클라이언트에서 읽어오기
            string a = args.Socket.Information.RemoteAddress.DisplayName.ToString();
            Stream inStream = args.Socket.InputStream.AsStreamForRead();
            StreamReader reader = new StreamReader(inStream);
            string request = await reader.ReadLineAsync();
            this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
                textBox1.Text = a+" "+DateTime.Now.ToString("HH:mm:ss")+"\n";
                textBlock_Copy.Text = request;
            }).AsTask().Wait();
         
            //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 echo_client()
        {
            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("192.168.10.142");

                //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 = DateTime.Now.ToString("HH:mm:ss");
                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.
            }
        }
        private void button_Click(object sender, RoutedEventArgs e)
        {
            echo_client();
        }
       
        DispatcherTimer dispatcherTimer;

        public void DispatcherTimerSetup()
        {
            dispatcherTimer = new DispatcherTimer();
            dispatcherTimer.Tick += dispatcherTimer_Tick;
            dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 100);
            dispatcherTimer.Start();
            TimerLog.Text += "dispatcherTimer.IsEnabled = " + dispatcherTimer.IsEnabled + "\n";
        }

        void dispatcherTimer_Tick(object sender, object e)
        {
            echo_client();
        }
    }
}








[최초 등록일: ]
[최종 수정일: 12/18/2015]


비밀번호

댓글 작성자
 



2015-12-21 12시21분
async/await을 어디에/어떤 메서드에 적용할지 혼동이 되신다면 간단하게 윈폼이나 콘솔 응용 프로그램으로 실습해 보세요. 그것을 이해하기 위해 UWP앱을 만드는 것은 오히려 혼란만 가중시킬 수 있습니다.

그리고 UWP앱은 기존의 I/O 메서드들이 blocking을 유발하므로 그 부분에 있어서는 거의 모두 비동기로 대체되었습니다. 따라서, I/O에 관해서는 (소켓을 포함해서) 사용하고 있는 것 자체가 async/await을 유발하도록 디자인되어 있으므로 적용 여부를 굳이 판단하실 필요가 없습니다.
정성태
2015-12-21 12시35분
[sungwoo park] 예 답변 감사합니다. 이해하기 위해 UWP앱을 만드는 것은 아닙니다.
지금 프로젝트가 Windows 10 Iot운영체제로 잡혔는데 이 이 운영체제는 UWP앱만 지원해서요 UWP앱으로 작업을 하고 있습니다.
그래서 UWP 앱으로 작업하고 있었는데 아무래도 원폼이나 콘솔 응용프로그램 먼저 실습해보고 이해 해야겠네요.
사실 xaml과 프로그램이 분리되어 있기도 하여서 지금 많이 어렵게 느껴집니다.
신기하게 다른언어들도 특히 비슷한 느낌이 많은 자바를 다뤄 보았는데 C# async/await는 참 어렵네요.
[guest]
2015-12-21 01시28분
혹시 근처에 대형 서점이 있어 제 책을 보실 수 있다면 6.6 스레딩과 10.2 비동기 호출 부분을 읽어보시면 도움이 되지 않을까 싶군요. ^^
정성태
2015-12-21 01시46분
예 감사합니다. 구입해서 공부해보겠습니다.
Sungwoo Park
2015-12-21 01시47분
아 책은 제가 구입했었습니다. 한번 보고 공부해 보겠습니다.
Sungwoo Park

... 76  77  78  79  80  81  82  83  84  85  86  [87]  88  89  90  ...
NoWriterDateCnt.TitleFile(s)
263하수11/11/20057180Smart Client(DB 연동에 질문영) [1]
260상수11/10/20058115Object등록시 에러 (Smart Client)
261정성태11/10/20057639    답변글 [답변]: Object등록시 에러 (Smart Client)
259바보스런...11/9/20057340스마트 질문좀 할께요. 죄송합니다.파일 다운로드1
262정성태11/10/20057177    답변글 [답변]: 스마트 질문좀 할께요. 죄송합니다. [1]
264Yuri11/11/20056853        답변글 [답변]: [답변]: 스마트 질문좀 할께요. 죄송합니다. [1]
266유리11/15/20057712            답변글 [답변]: [답변]: [답변]: 스마트 질문좀 할께요. 죄송합니다. [2]
257차우차우10/28/20057205스마트 클라이언드 에서.. 수정하면 안돼는 문제? [1]파일 다운로드1
254박상호10/26/20057346스마트 클라이언트관련해서 질문이 있습니다. [1]
253Lee ...10/27/20057394안녕하세요. 바쁘신데 이렇게 질문드려서 죄송합니다. 스마트 클라이언트에 관한 질문입니다. [2]
252홍영진10/26/20057769SmartClient 배포시 닷넷프레임워크배포
255정성태10/27/20057920    답변글 [답변]: SmartClient 배포시 닷넷프레임워크배포
249ROY10/23/20057256X-internet & Peer to Peer
251정성태10/24/20057795    답변글 [답변]: X-internet & Peer to Peer [1]
246뽀송이10/17/20057641스마트클라이언트 개념에 대한 질문입니다.(Connection Pool사용 가능?) [2]
247정성태10/17/20057637    답변글 [답변]: 스마트클라이언트 개념에 대한 질문입니다.(Connection Pool사용 가능?)
248뽀송이10/17/20058005        답변글 [답변]: [답변]: 스마트클라이언트 개념에 대한 질문입니다.(DB연동을 웹서비스로 하면 문제는?) [3]
245오혁천10/12/20058454스마트 클라이언트에서.. Socket 함수 사용 [1]
244정우기10/11/20057629스마트클라이언드 권한관련 콜솔 프로그램 에 관하여 문의좀..ㅜ.,ㅜ [1]
242이용희10/7/20057659스마트클라이언트 배포시 .NET Framework 버전에 관한 문제
243정성태10/10/20057561    답변글 [답변]: 스마트클라이언트 배포 시 .NET Framework 버전에 관한 문제 [3]
241김재옥10/5/20057355smart client에서의 Socket 함수 사용 [1]
240이형배9/15/20056846스마트클라이언트배우고 싶어여... [1]
239장강현9/14/200511590SmartClient에서의 배포 문제에 대해 [2]
238이순원9/13/20057262디버깅 할때 native 옵션껐는데두 너무 느려요.. [1]
236코디9/12/20057212[질문]런타임 보안 배포 [1]
... 76  77  78  79  80  81  82  83  84  85  86  [87]  88  89  90  ...