我用 C 语言为 C# 编写了一个简单的 Winsock 包装器。当我在某个线程中使用 Socket.Accept() 并在主线程中使用 client.Connect 时 - 我有时(收到 DllNotFoundException。
System.DllNotFoundException:引发了“System.DllNotFoundException”类型的异常。在 (wrapper managed-to-native) TcpWrapper:ES_ConnectClient (string,int) at TcpClientSocket.Connect (System.String address, Int32 port) [0x00000] in C:...\ESCore\TcpClientSocket.cs:21
TcpClientSocket.Connect 调用
[DllImport("ESocket")]
public static extern int ES_ConnectClient(string ip, int port);
我不知道为什么这种情况很少发生。
一些代码:
listener = new TcpListenerSocket(50231); //calling bind from library here
if (listener.Start()) //calling listen from library
{
thread = new Thread(new ThreadStart(Listen));
thread.Start();
client = new TcpClientSocket();
if(client.Connect("localhost", 50231)) //exception here!
{
...
client.Close();
}
}
线程代码:
void Listen()
{
while (m_Running)
{
if (listener.Pending()) //select from library
{
TcpClientSocket socket = listener.Accept(); //accept from library
if (socket != null)
{
...
socket.Close();
}
}
}
}
听众也在图书馆。
库代码: http: //pastie.org/private/hdgl9zqxfjt2arlkj11q
更新: 这只发生在 Unity3d 中。在单声道项目和 Microsoft .NET 中没有错误。