private bool InitDevice() { if (_current_if == null) { MessageBox.Show("Please select network interface first", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } if (rbModeRouting.Checked) { _mode = DEVICE_MODE.MODE_ROUTING; } if (rbModeTunneling.Checked) { _mode = DEVICE_MODE.MODE_TUNNELING; } if (_sock != null && _sock.IsBound) { _sock.Close(); } string local_addr = this.ipAddressControl1.Text; _local_endpoint = new IPEndPoint(IPAddress.Parse(local_addr), (int)this.numericUpDown1.Value); _sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.IP); _sock.Bind(_local_endpoint); switch (_mode) { case DEVICE_MODE.MODE_ROUTING: IPAddress multicast_addr = IPAddress.Parse(DEFAULT_MULTICAST_ADDRESS); MulticastOption option = new MulticastOption(multicast_addr); _sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, option); _remote_data_endpoint = new IPEndPoint(multicast_addr, DEFAULT_EIB_PORT); this.ipAddressControl1.Text = DEFAULT_MULTICAST_ADDRESS; break; case DEVICE_MODE.MODE_TUNNELING: IPAddress maddr = IPAddress.Parse(DEFAULT_MULTICAST_ADDRESS); MulticastOption opt = new MulticastOption(maddr, IPAddress.Parse(local_addr)); _sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, opt); _sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastLoopback, true); //_sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.ReuseAddress, 1); _recv_sequence = 0; _send_sequence = 0; this.ipAddressControl1.Text = local_addr; break; } return(true); }
private bool InitDevice() { if (_current_if == null) { MessageBox.Show("Please select network interface first", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } if (rbModeRouting.Checked) { _mode = DEVICE_MODE.MODE_ROUTING; } if (rbModeTunneling.Checked) { _mode = DEVICE_MODE.MODE_TUNNELING; } if(_sock != null && _sock.IsBound) _sock.Close(); string local_addr = this.ipAddressControl1.Text; _local_endpoint = new IPEndPoint(IPAddress.Parse(local_addr), (int)this.numericUpDown1.Value); _sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.IP); _sock.Bind(_local_endpoint); switch (_mode) { case DEVICE_MODE.MODE_ROUTING: IPAddress multicast_addr = IPAddress.Parse(DEFAULT_MULTICAST_ADDRESS); MulticastOption option = new MulticastOption(multicast_addr); _sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, option); _remote_data_endpoint = new IPEndPoint(multicast_addr, DEFAULT_EIB_PORT); this.ipAddressControl1.Text = DEFAULT_MULTICAST_ADDRESS; break; case DEVICE_MODE.MODE_TUNNELING: IPAddress maddr = IPAddress.Parse(DEFAULT_MULTICAST_ADDRESS); MulticastOption opt = new MulticastOption(maddr, IPAddress.Parse(local_addr)); _sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, opt); _sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastLoopback, true); //_sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.ReuseAddress, 1); _recv_sequence = 0; _send_sequence = 0; this.ipAddressControl1.Text = local_addr; break; } return true; }