«Не удается открыть сокет или соединение отказано» в .NET - PullRequest
2 голосов
/ 09 марта 2010

Я получаю отказано в соединении, когда пытаюсь отправить данные в серверное приложение с помощью 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 ]

3 голосов
/ 29 марта 2010

Проблема решена, мне пришлось переместить 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
2 голосов
/ 13 марта 2010

В вашем коде нет ничего плохого, он отлично работает.

Вызов метода Accept () в классе Socket будет блокироваться до тех пор, пока не будет предпринята попытка подключения клиента к вашему TCP-порту 12345.

«Здесь останавливается; ничего не происходит» - это правильное и ожидаемое поведение, но не точное описание.

Что происходит, так это то, что ваш сокет ожидает подключения клиента.

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

"В режиме блокировки Accept блокируется до тех пор, пока попытка входящего соединения не будет поставлена ​​в очередь. Как только соединение принято, исходный сокет продолжает ставить в очередь входящие запросы на соединение, пока вы не закроете его."

Чтобы проверить ваш код, откройте клиент Telent (введите «telnet» в командной строке) и введите команду «open localhost 12345». Ваш код «проснется».

0 голосов
/ 15 сентября 2017

Если вы используете эмулятор Android, когда он находится под Android Studio или Xamarin, его IP-адрес равен 10.0.2.2

Пример: http://10.0.2.2:8585/v1/planificacion/planoperativo/cpercodigo/7000012312

0 голосов
/ 10 марта 2010

Вы пытались использовать вместо этого TcpListener?

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

Я обнаружил, что гораздо проще использовать TcpListner и TcpClient, чем Sockets.

...