2010-03-09 61 views
0

当我尝试使用netcat将一些数据发送到我的服务器应用程序时,我拒绝了连接。“无法打开套接字或拒绝连接”使用.NET

服务器端:

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

尝试使用'AddressFamily.InterNetwork'而是因为, 'ip'可能是一个IPv4地址。 – Virtlink 2010-03-09 19:00:49

+0

你必须向我们展示客户端代码。 – Gabe 2010-03-13 04:14:01

回答

1

问题解决了,我不得不在数组中移动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 
+0

请学会格式化你的代码。只需选择代码并按下Control-K。 – 2010-03-29 02:21:46

0

您是否尝试过使用的TcpListener呢?

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

我发现使用TcpListner和TcpClient而不是套接字要容易得多。

+0

我下次试试吧 谢谢 – HoNgOuRu 2010-03-29 03:05:41

2

你的代码绝对没有错,它的功能完美。

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

“它停在这里,什么也没有发生”是正确的和预期的行为,但不准确的描述。

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

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

“在阻塞模式,接受块,直到传入的连接尝试排队,一旦连接被接受后,原来的Socket继续排队进入的连接请求,直到你关闭它”

要测试您的代码,请打开一个远程客户端(在命令提示符下输入“telnet”),然后输入命令“open localhost 12345”。你的代码会'醒来'。

相关问题