簡體   English   中英

c#語言如何斷開代碼?

[英]For c# language how to make disconnect the code?

我也想在我的表單中添加斷開連接按鈕,但我不知道如何斷開代碼? 怎么斷開連接呢? 請參閱下面的代碼。 這僅適用於本地數據庫

這是用於 Visual Studio 2017。我在 Visual Studio 中使用裸 SQL 和 localDB

    Socket sck;
    EndPoint epLocal, epRemote;
    byte[] buffer;

   //

    private void Form8_Load(object sender, EventArgs e)
    {
        sck = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        sck.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

        textLocalIp.Text = GetLocalIP();
        textRemoteIP.Text = GetLocalIP();
    }

    private void buttonConnect_Click(object sender, EventArgs e)
    {
        epLocal = new IPEndPoint(IPAddress.Parse(textLocalIp.Text), Convert.ToInt32(textLocalPort.Text));
        sck.Bind(epLocal);
        epRemote = new IPEndPoint(IPAddress.Parse(textRemoteIP.Text), Convert.ToInt32(textRemotePort.Text));
        sck.Connect(epRemote);
        buffer = new byte[1500];
        sck.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref epRemote, new AsyncCallback(MessageCallBack), buffer);
    }
    private void MessageCallBack(IAsyncResult aResult)
    {
        try
        {
            byte[] receivedData = new byte[1500];
            receivedData = (byte[])aResult.AsyncState;
            ASCIIEncoding aEncoding = new ASCIIEncoding();
            string receivedMessage = aEncoding.GetString(receivedData);
            listMessage.Items.Add("Client: " + receivedMessage);
            buffer = new byte[1500];
            sck.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref epRemote, new AsyncCallback(MessageCallBack), buffer);
        } catch(Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
        }
          private void buttonSend_Click(object sender, EventArgs e)
    {
       ASCIIEncoding aEncoding = new ASCIIEncoding();
        byte[] sendingMessage = new byte[1500];
        sendingMessage = aEncoding.GetBytes(textMessage.Text);
        sck.Send(sendingMessage);
        listMessage.Items.Add("Admin: " + textMessage.Text);
        textMessage.Text = "";
    }
          private string GetLocalIP()
    {
        IPHostEntry host;
        host = Dns.GetHostEntry(Dns.GetHostName());
        foreach(IPAddress ip in host.AddressList)
        {
            if (ip.AddressFamily == AddressFamily.InterNetwork)
                return ip.ToString();
        }
        return "127.0.0.1";
    }

創建一個類似於connect按鈕的按鈕進行斷開連接並使用Socket.Disconnect

private void buttonDisconnect_Click(object sender, EventArgs e)
{
    if (sck.Connected)
    {
        sck.Shutdown(SocketShutdown.Both);
        sck.Disconnect(true);
    }
}

您可以刪除 Disconnect 方法來執行此操作。 像下面這樣:

 private void Button3_Click(object sender, EventArgs e)
        {
            if (sck.Connected)
            {
                sck.Shutdown(SocketShutdown.Both);
                MessageBox.Show(sck.Connected.ToString()); // this is to see if socket is connected.
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM