2012-06-02 2 views
1

У меня есть клиент, который предоставил мне порт ssl url: port для отправки информации (строка, содержащая данные xml) на свой сервер. Я использовал для Putty (в режиме Telnet), чтобы успешно взаимодействовать с сервером, и получать ответ, но когда я использую следующий код никакой связи не сделаноОшибка связи сокета

outputmsg = string.Empty; 
       var m_socListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); 
       IPHostEntry ipAddress = Dns.GetHostEntry("testurlhere"); 
       var ip = new IPEndPoint(ipAddress.AddressList[0], 10121); 
       m_socListener.Connect(ip); 

       byte[] tosend = GetBytes(inputmsg); 
       byte[] buffer = new byte[1024]; 
       m_socListener.Send(tosend); // doesnt sends data and returns immediately 
       m_socListener.Receive(buffer); // waits forever 
       m_socListener.Close(); 



static byte[] GetBytes(string str) 
     { 
      byte[] bytes = new byte[str.Length * sizeof(char)]; 
      System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); 
      return bytes; 
     } 

    static string GetString(byte[] bytes) 
    { 
     char[] chars = new char[bytes.Length/sizeof(char)]; 
     System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length); 
     return new string(chars); 
    } 
+1

Вопрос: Вы абсолютно уверены, что «ничего не отправлено на сервер»? Например, возможно, сервер ждет «\ n» (и вам не удалось отправить его в «inputmsg»). Существует много возможных сценариев. Определенно проверяйте ошибки на клиенте; определенно проверьте, что - если что угодно - вы получаете на сервере. И определенно проверьте наличие брандмауэров между ними. – paulsm4

+1

Да, я проверил их журналы и ничего не нашел на сервере. – logeeks

+1

Если ничто не отправляется на сервер, то, возможно, tosend не имеет в нем ничего. Если вы пытаетесь получить байты из строки, используйте [Encoding.GetBytes] (http://msdn.microsoft.com/en-us/library/system.text.encoding.getbytes.aspx) – 3aw5TZetdf

ответ

0

Решение было использовать правильную кодировку в моем случае это ASCII и добавить \ п к сообщению как сказал paulsm4.

1

Я думаю, что решение здесь может быть SetSockOpt NODELAY :

http://msdn.microsoft.com/en-us/library/e160993d.aspx

я второй m0s наиболее Прекрасное предложение попробовать WireShark. Если вы еще не знакомы с этим - удовлетворение гарантировано!

Но похоже, что NoDelay (отключение Nagle) может решить проблему. Эта ссылка может помочь прояснить:

http://en.wikipedia.org/wiki/Nagle%27s_algorithm

Смежные вопросы