用.NET打开“无法打开套接字或拒绝连接”

时间:2010-03-09 18:51:52

标签: c# .net sockets tcp

当我尝试使用netcat将一些数据发送到我的服务器应用程序时,我的连接被拒绝了。

服务器端:

IPAddress ip;
ip = Dns.GetHostEntry("localhost").AddressList[0];
IPEndPoint ipFinal = new IPEndPoint(ip, 12345);
Socket socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(ipFinal);
socket.Listen(100);
Socket handler = socket.Accept(); ------> it stops here......nothing happens

4 个答案:

答案 0 :(得分:3)

问题解决了,我不得不在阵列中移动1个位置,导致第一个位置指向IPv6地址。

IPAddress ip;
ip = Dns.GetHostEntry("localhost").AddressList[1];
IPEndPoint ipFinal = new IPEndPoint(ip, 12345);
Socket socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(ipFinal);
socket.Listen(100);
Socket handler = socket.Accept(); //------> it stops here......nothing happens

答案 1 :(得分:2)

您的代码完全没有问题,它运行正常。

对Socket类的Accept()方法的调用将阻塞,直到从客户端到TCP端口12345进行连接尝试。

“它停在这里;没有任何反应”是正确和预期的行为,但不是准确的描述。

发生的事情是您的套接字正在等待客户端连接。

请参阅:http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.accept.aspx

“在阻止模式下,接受阻塞,直到传入的连接尝试排队。一旦接受连接,原始Socket将继续排队传入的连接请求,直到您关闭它。”

要测试代码,请打开telent客户端(在命令提示符下键入“telnet”),然后输入命令“open localhost 12345”。你的代码将“醒来”。

答案 2 :(得分:0)

您是否尝试过使用TcpListener?

TcpListener listener = new TcpListener(IPAddress.Any, 12345);
listener.Start();
TcpClient client = listener.AcceptTcpClient();

我发现使用TcpListner和TcpClient而不是Sockets更容易。

答案 3 :(得分:0)

如果您使用的是Android模拟器,只要它在Android Studio或Xamarin下,其IP为10.0.2.2

实施例: http://10.0.2.2:8585/v1/planificacion/planoperativo/cpercodigo/7000012312