[英]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.