public void PrepareClient(int localPort) { if (serverStatus == csUdpConnStatus.Opened) { return; } try { // server 객체 얻기 clientForServer = new UdpClient(localPort); // set End Point broadcastEP = new IPEndPoint(IPAddress.Any, localPort); threadRcv = new Thread(ReceiveThreadMain); threadRcv.Start(); } catch (Exception ex) { Console.WriteLine(ex); serverStatus = csUdpConnStatus.Closed; } serverStatus = csUdpConnStatus.Opened; }
//=============================================================== // Receive Thread Main //=============================================================== private void ReceiveThreadMain() { try { byte[] bytebuff; while (true) { Thread.Sleep(1); bytebuff = clientForServer.Receive(ref broadcastEP); lock (RcvByteList) { RcvByteList.AddRange(bytebuff); } // 데이터 수신 callback 함수 호출 if (DataArrivalCallback != null) { DataArrivalCallback(); } } } catch (Exception ex) { System.Console.WriteLine(ex.ToString()); } finally { clientForServer.Close(); serverStatus = csUdpConnStatus.Closed; } }
private void tmrConnCheck_Tick(object sender, EventArgs e) { if (rB_tcp.Checked) { if (tServer == null) { lblStat.Text = "Conn: NULL"; } else { csConnStatus conn = tServer.ServerStatus(); lblStat.Text = "Conn: " + conn.ToString(); } } else if (rB_udp.Checked) { if (uServer == null) { lblStat.Text = "Conn: NULL"; } else { csUdpConnStatus conn = uServer.ServerStatus(); lblStat.Text = "Conn: " + conn.ToString(); } } }
//=============================================================== // Server : Close //=============================================================== public void ServerClose() { if (clientForServer != null) { clientForServer.Close(); } // 순서 바뀌면 안됨 if (threadRcv != null && threadRcv.IsAlive) { threadRcv.Abort(); threadRcv.Join(); } if (threadChkDeath != null && threadChkDeath.IsAlive) { threadChkDeath.Abort(); threadChkDeath.Join(); } serverStatus = csUdpConnStatus.Closed; }
//=============================================================== // Server : Start //=============================================================== public void openUdpServer(int serverPort) { if (serverStatus == csUdpConnStatus.Opened) { return; } // 1단계 : Start try { // server 객체 얻기 clientForServer = new UdpClient(serverPort); // server측 접속 IP 객체 얻기 broadcastEP = new IPEndPoint(IPAddress.Any, serverPort); } catch (SocketException e) { Console.WriteLine(e); return; } serverStatus = csUdpConnStatus.Opened; }