闭合C#插座
我有一个带有以下代码的按钮:闭合C#插座,c#,sockets,C#,Sockets,我有一个带有以下代码的按钮: private void按钮1\u单击(对象发送者,事件参数e) { IPHostEntry主机=Dns.GetHostEntry(输入的ip); foreach(host.AddressList中的变量地址) { var ipe=新的IPEndPoint(地址7779); var samp=新套接字(ipe.AddressFamily,SocketType.Stream,ProtocolType.Tcp); 采样连接(ipe); 如果(已连接样本) { 启用_an
private void按钮1\u单击(对象发送者,事件参数e)
{
IPHostEntry主机=Dns.GetHostEntry(输入的ip);
foreach(host.AddressList中的变量地址)
{
var ipe=新的IPEndPoint(地址7779);
var samp=新套接字(ipe.AddressFamily,SocketType.Stream,ProtocolType.Tcp);
采样连接(ipe);
如果(已连接样本)
{
启用_anticheat();
进程启动(“samp://”+输入的ip+:“+输入的端口”);
打破
}
其他的
{
继续;
}
}
}
我想在应用程序关闭时关闭套接字samp
。但它怎么能关闭呢?
我知道套接字是通过调用samp.Close()
关闭的,但是如果我在表单的FormClosing
事件中添加此项,我得到的错误元素在当前上下文中不存在
我尝试使用的代码是:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
samp.Close();
}
谢谢。好了,不过我要说的是,您可能不想一直点击按钮,否则它会打开所有相同连接的各种套接字,或者至少会抛出一个错误:
private List<Socket> samp = new List<Socket>();
private void button1_Click(object sender, EventArgs e)
{
//If you don't want the error
//if(samp.Count > 0) return;
IPHostEntry host = null;
Socket sock;
host = Dns.GetHostEntry(entered_ip);
foreach (IPAddress address in host.AddressList)
{
IPEndPoint ipe = new IPEndPoint(address, 7779);
sock = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
sock.Connect(ipe);
if (sock.Connected)
{
enable_anticheat();
samp.Add(sock);
Process.Start("samp://" + entered_ip + ":" + entered_port);
break;
} //The else continue is unnecessary.
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if(samp.Count > 0) {
foreach(Socket s in samp) {
s.close();
}
}
}
private List samp=new List();
私有无效按钮1\u单击(对象发送者,事件参数e)
{
//如果你不想出错
//如果(samp.Count>0)返回;
IPHostEntry主机=null;
插座;
主机=Dns.GetHostEntry(在ip中输入);
foreach(主机地址列表中的IP地址)
{
IPEndPoint ipe=新的IPEndPoint(地址7779);
sock=新套接字(ipe.AddressFamily、SocketType.Stream、ProtocolType.Tcp);
插座连接(ipe);
如果(插座连接)
{
启用_anticheat();
samp.Add(sock);
进程启动(“samp://”+输入的ip+:“+输入的端口”);
打破
}//不需要继续。
}
}
私有作废Form1\u FormClosing(对象发送方,FormClosingEventArgs e)
{
如果(samp.Count>0){
foreach(samp中的插座s){
s、 close();
}
}
}
您的变量套接字应该作为类的成员在函数外部声明。我知道,但是如何声明?请帮助:(Woops只是在用java编程。它应该是foreach(samp中的套接字){