//Ukončení spojení public void Close() { try { SocketAniDb.Shutdown(SocketShutdown.Both); SocketAniDb.Close(); SocketAniDb = null; } catch { SocketAniDb = null; } Status = SocketMsgs.SDisconnect; }
//Připojení k serveru public void Connnect() { try { SocketAniDb = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); SocketAniDb.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, _timeOut); SocketAniDb.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontRoute, true); SocketAniDb.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); LocalHostEntry = Dns.GetHostByName(Dns.GetHostName()); var k = 0; if (_netGw.Length == 3) { for (var i = 0; i < LocalHostEntry.AddressList.Length; i++) { if (LocalHostEntry.AddressList[i].ToString() == _netGw[2]) { k = i; break; } } } LocalIpEndPoint = new IPEndPoint(LocalHostEntry.AddressList[k], _localPort); SenderRemote = LocalIpEndPoint; SocketAniDb.Bind(LocalIpEndPoint); RemoteHostEntry = Dns.GetHostByName(_serverName); RemoteIpEndPoint = new IPEndPoint(RemoteHostEntry.AddressList[0], _serverPort); ReceiverRemote = RemoteIpEndPoint; SocketAniDb.Connect(RemoteIpEndPoint); Status = SocketMsgs.SConnect; } catch (Exception e) { Close(); } }
//Příjem dat public byte[] Receive(byte[] buffer, int offset, int size) { if (SocketAniDb.Connected) { Status = SocketMsgs.SReceiveing; var startTickCount = Environment.TickCount; var received = 0; // how many bytes is already received do { if (Environment.TickCount > startTickCount + _timeOut) { break; } try { received += SocketAniDb.Receive(buffer, offset + received, size - received, SocketFlags.None); } catch (SocketException ex) { if (ex.SocketErrorCode == SocketError.WouldBlock || ex.SocketErrorCode == SocketError.IOPending || ex.SocketErrorCode == SocketError.NoBufferSpaceAvailable) { // socket buffer is probably empty, wait and try again Thread.Sleep(30); } } } while (received < size); Status = SocketMsgs.SReceive; return(buffer); } Status = SocketMsgs.SDisconnect; return(ConvertToByte("DISCONNECT")); }
//Odeslání dat public void Send(byte[] buffer, int offset, int size) { if (SocketAniDb != null) { Status = SocketMsgs.SSending; var startTickCount = Environment.TickCount; var sent = 0; // how many bytes is already sent do { if (Environment.TickCount > startTickCount + _timeOut) { break; } try { sent += SocketAniDb.Send(buffer, offset + sent, size - sent, SocketFlags.None); } catch (SocketException ex) { if (ex.SocketErrorCode == SocketError.WouldBlock || ex.SocketErrorCode == SocketError.IOPending || ex.SocketErrorCode == SocketError.NoBufferSpaceAvailable) { // socket buffer is probably full, wait and try again Thread.Sleep(30); } } } while (sent < size); Status = SocketMsgs.SSend; } else { Status = SocketMsgs.SDisconnect; } }