Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 传递给套接字侦听器的参数无效_C#_Sockets - Fatal编程技术网

C# 传递给套接字侦听器的参数无效

C# 传递给套接字侦听器的参数无效,c#,sockets,C#,Sockets,我一直在不断地收到这个错误,我相信我把问题缩小到我是64位机器上的监听器。有没有办法让它在64位系统上运行 18 Socket sListener; ... 34 permission = new SocketPermission(NetworkAccess.Accept, TransportType.Tcp, "", SocketPermission.AllPorts); 36 //Listening Socket object 37

我一直在不断地收到这个错误,我相信我把问题缩小到我是64位机器上的监听器。有没有办法让它在64位系统上运行

18      Socket sListener;
...
34          permission = new SocketPermission(NetworkAccess.Accept, TransportType.Tcp, "", SocketPermission.AllPorts);

36          //Listening Socket object
37          sListener = null;

39          //Ensure the code has permission to access the Socket
40          permission.Demand();

42          IPHostEntry ipHost = Dns.GetHostEntry("");
43          IPAddress ipAddress = ipHost.AddressList[2];
44          ipEndPoint = new IPEndPoint(ipAddress, 4510);

46          sListener = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
...
71      sListener.Listen(10);
72
73      //Begins an asynchronous operation to accept an attempt
74      AsyncCallback aCallback = new AsyncCallback(AcceptCallback);
75      sListener.BeginAccept(aCallback, sListener);

我试图按照这个问题中的代码进行操作,但它给了我一个错误:

运算符“==”不能应用于“System.Net.Sockets.AddressFamily”和“string”类型的操作数


是否检查了中讨论的
MaxConnections
属性


该文档还介绍了如何检查
ErrorCode
,以了解更多详细信息。也许你应该探索一下这个选项。

我认为你错过了,在一个端口上可以安装一个套接字之前

根据MSDN:

如果需要使用特定的本地端点,请使用Bind方法。你 必须先调用Bind,然后才能调用Listen方法。你不需要 在使用Connect方法之前调用Bind,除非需要使用 特定的本地端点。您可以在这两种情况下使用Bind方法 无连接和面向连接的协议

在调用Bind之前,必须首先从 您打算在其中传递数据。如果你不在乎哪个地方 如果已分配地址,则可以使用IPAddress创建IPEndPoint。任何 作为地址参数,基础服务提供商将 分配最合适的网络地址。这可能有助于简化 如果您有多个网络接口,请选择您的应用程序。如果你这样做 不管使用哪个本地端口,都可以使用 端口号为0。在这种情况下,服务提供商将分配 介于1024和5000之间的可用端口号



注意:侦听端口始终使用大于4000的值

也许下面的示例也会对您有所帮助

Socket clientSocket;
System.Net.IPEndPoint clientEndPoint;
System.Net.Sockets.NetworkStream networkStream;
IAsyncResult beginAcceptAsyncResult;
System.Threading.WaitHandle []waitHandleArray;
int waitHandleSignalled;

System.Net.IPEndPoint listenEndpoint = new System.Net.IPEndPoint("127.0.0.1", 45000); //make sure port is free (check with cmd: netstat -an)
System.Net.Sockets.TcpListener listener = new System.Net.Sockets.TcpListener(listenEndpoint);

waitHandleArray = new System.Threading.WaitHandle[1];

listener.Start();

do
{
    try
    beginAcceptAsyncResult = listener.BeginAcceptSocket(null, null);
    waitHandleArray[0] = beginAcceptAsyncResult.AsyncWaitHandle;
    waitHandleSignalled = System.Threading.WaitHandle.WaitAny(waitHandleArray);

    if (waitHandleSignalled != 0)
    {
        clientSocket = _TCPListener.EndAcceptSocket(BeginAcceptAsyncResult);

        clientEndPoint = clientSocket.RemoteEndPoint as System.Net.IPEndPoint;

        networkStream = new System.Net.Sockets.NetworkStream(clientSocket, true);

        //do more with NetworkStream...
    }
}
//...
//...

在代码中,我找不到与
==
相关的任何内容。对于从相关问题中得到的代码中的错误,AddressFamily是一个枚举。尝试
==AddressFamily.InterNetwork
而不是
==“InterNetwork”
Socket clientSocket;
System.Net.IPEndPoint clientEndPoint;
System.Net.Sockets.NetworkStream networkStream;
IAsyncResult beginAcceptAsyncResult;
System.Threading.WaitHandle []waitHandleArray;
int waitHandleSignalled;

System.Net.IPEndPoint listenEndpoint = new System.Net.IPEndPoint("127.0.0.1", 45000); //make sure port is free (check with cmd: netstat -an)
System.Net.Sockets.TcpListener listener = new System.Net.Sockets.TcpListener(listenEndpoint);

waitHandleArray = new System.Threading.WaitHandle[1];

listener.Start();

do
{
    try
    beginAcceptAsyncResult = listener.BeginAcceptSocket(null, null);
    waitHandleArray[0] = beginAcceptAsyncResult.AsyncWaitHandle;
    waitHandleSignalled = System.Threading.WaitHandle.WaitAny(waitHandleArray);

    if (waitHandleSignalled != 0)
    {
        clientSocket = _TCPListener.EndAcceptSocket(BeginAcceptAsyncResult);

        clientEndPoint = clientSocket.RemoteEndPoint as System.Net.IPEndPoint;

        networkStream = new System.Net.Sockets.NetworkStream(clientSocket, true);

        //do more with NetworkStream...
    }
}
//...
//...