C# 传递给套接字侦听器的参数无效
我一直在不断地收到这个错误,我相信我把问题缩小到我是64位机器上的监听器。有没有办法让它在64位系统上运行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
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...
}
}
//...
//...