<p>好的,经过几个小时的实验和浏览互联网,我已经解决了这个问题</p>
<p>感谢@jdweng的评论,首先要做的是从客户端向服务器发送一条消息</p>
<blockquote>
<p>Server doesn't do anything when a connection is made. The server is a slave and waits for a client to send a command. [...] It behaves differently as console application, because you are dealing with a different kernel/operating system with different drivers.</p>
</blockquote>
<p>将<code>server.SendFrameEmpty();</code>添加到客户端和<code>socket.recv()</code>添加到服务器可以解决问题,但Unity仍然冻结</p>
<p>我发现<a href="https://github.com/zeromq/netmq/issues/631#issuecomment-324172535" rel="nofollow noreferrer">this answer</a>说:</p>
<blockquote>
<p>The key is to have <code>AsyncIO.ForceDotNet.Force();</code> before you start and <code>NetMQConfig.Cleanup();</code> before you end.</p>
</blockquote>
<p>最后,整个工作代码如下所示</p>
<pre><code>public class AiManager : MonoBehaviour
{
void Start()
{
AsyncIO.ForceDotNet.Force();
using (var server = new PairSocket())
{
server.Connect("tcp://localhost:5556");
server.SendFrameEmpty();
var msg = server.ReceiveFrameString();
Debug.Log(msg);
}
NetMQConfig.Cleanup();
}
}
</code></pre>