계속 시도 해 보았는데요. 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]