当我尝试使用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
答案 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