gpt4 book ai didi

C# 套接字错误 10022

转载 作者:行者123 更新时间:2023-12-03 12:06:57 25 4
gpt4 key购买 nike

在 C# .NET3.5 中使用套接字的应用程序中出现错误 10022。

在我的代码中,我将套接字绑定(bind)到本地 IP 地址。
当我不再需要它时,我只需使用“true”断开它(reader.socket.Disconnect(true);),以便能够重新使用它。

但是当我再次调用“绑定(bind)”方法时,它会因 10022 错误(无效参数)而崩溃。

如果我使用此方法将行设置为注释,则它会在“listen”行崩溃,表示已设置连接(尽管我调用了断开连接!)

任何的想法?

谢谢

这是失败的代码部分:

public void WaitConnexion(IPEndPoint localEP)
{
if (localEP.Port != 9000)
{
MessageBox.Show("Le port doit être 9000");
return;
}
LocalEndPoint = localEP;

if (reader.socket.Connected)
{
MessageBox.Show("Vous êtes déjà connecté", "Conflit de connexion", MessageBoxButton.OK, MessageBoxImage.Exclamation);
return;
}

// on bind le socket avec le endpoint local, et on le met en attente de connexion asynchrone

// reader.socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);


reader.socket.Bind(localEP);

reader.socket.Listen(1);

reader.socket.BeginAccept(new AsyncCallback(WaitConnexionCallBack), reader.socket);
}

这是带有回调的 diconnect 方法:
 public void Disconnect()
{
if (!reader.socket.Connected)
return;


reader.socket.BeginDisconnect(true, new AsyncCallback(DisconnectCallBack), reader.socket);


}

private void DisconnectCallBack(IAsyncResult result)
{
reader.socket = (result.AsyncState as Socket);
reader.socket.EndDisconnect(result);


if (Disconnected != null)
Disconnected(this, EventArgs.Empty);



}

最佳答案

我找到了解决方案。

似乎垃圾收集器的调用速度不够快,让内存中的一些套接字的值被实际处理。

DisconnectedCallBack 中的代码修改:

   reader.socket = (result.AsyncState as Socket);
reader.socket.EndDisconnect(result);
reader.socket.close(0);
GC.Collect(); // call garbage collector to clean the socket

WaitConnexion 中的代码修改:
 reader.socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

重新创建套接字。

关于C# 套接字错误 10022,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1707214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com