2015-11-05 1 views
-1

У меня есть сетевое приложение, запущенное на моем компьютере локально. Он имеет сетевой интерфейс и использует протокол tcp. Я могу успешно подключиться к нему через telnet, отправить команду и получить результат.Не удается получить результат через сокет из приложения - «Существующее соединение было принудительно закрыто удаленным хостом»

telnet localhost 1234 
....... 
my_command 
=> result # That's it 

Однако, я не могу сделать то же самое в C#, он всегда возвращает ошибку

Unhandled Exception: System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host 

Вот мой код:

 socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Tcp); 
     socket.Connect(host, port); 
     var buffer = Encoding.ASCII.GetBytes(cmd); 
     socket.Send(buffer, 0, buffer.Length, SocketFlags.None); 

     var buffer2 = new byte[1055]; 
     int rec = socket.Receive(buffer2, 0, buffer2.Length, SocketFlags.None); # the error is thrown here 

код довольно прост. Я что-то делаю неправильно?

ответ

1

Telnet - это специфический протокол по TCP, который требует определенных последовательностей команд для работы. Socket - это просто средство для подключения к любому серверу на определенном порту. Так что для telnet для работы с сокетом вам нужно использовать любую библиотеку, которая реализует протокол telnet. здесь один, который вы можете дать попробовать Telnet c# и this

Другое наблюдение, почему вы используете SocketType.Dgram должно быть SocketType.Stream в качестве TCP

socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);