闭合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中的套接字){