BG Development


Страници: (2) 1 [2]   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Как се прави връзка пo Telnet
patrik5
Публикувано на: 07-01-2018, 17:31
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 241
Регистриран на: 07.10.11



Благодаря, точно това ми беше питането, утре ще го пробвам!
PMEmail Poster
Top
patrik5
Публикувано на: 08-01-2018, 15:10
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 241
Регистриран на: 07.10.11



Днес направих пробата, и се получи когато съм в режим дебъг, когато минавам ред по ред всичко си е ок, иска узер вкарвам го иска пас вкарвам излиза някаква информация и вс си е ОК,
НО когато я рънна не дава грешка минава ци цялата програма но не извършва корекциите не виждам да иска усер и пасс. Единсвеното което се изпраща са няколко S на различн редове. Някъде трябва да сложа някакви времена за забавяне или в цикъл ли трябва да чета информацията. Според мен мн бързо изпраща командите и устройството не може да се осъзнае отсреща. Ако може малко помощ и за това.


Кода ми е :
CODE

 Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
           try
           {
               sender.Connect(remoteEP);
               if (sender.Connected)
               {
                   byte[] rec21 = new byte[512];
                   Console.WriteLine(Encoding.ASCII.GetString(rec21));

               }


               byte[] bytes1 = new byte[128];
               byte[] msg1 = Encoding.ASCII.GetBytes("SSSSSS;" + "\n");
               int bytesSent1 = sender.Send(msg1);
               Console.WriteLine("Sent {0} bytes.", bytesSent1);
               bytesSent1 = sender.Receive(bytes1);
               Console.WriteLine(Encoding.ASCII.GetString(bytes1));
               Console.WriteLine(Encoding.UTF8.GetString(bytes1));
               Console.WriteLine("OK");
               

               byte[] rec1 = new byte[128];
               byte[] sendUser = Encoding.ASCII.GetBytes("USER" + "\n");
              int bytesSent = sender.Send(sendUser);
               bytesSent = sender.Receive(rec1);
               Console.WriteLine(Encoding.ASCII.GetString(rec1));



               byte[] rec2 = new byte[128];
               byte[] sendPass = Encoding.ASCII.GetBytes("HELP" + "\n");
               bytesSent = sender.Send(sendPass);
               bytesSent = sender.Receive(rec2);
               Console.WriteLine(Encoding.ASCII.GetString(rec2));



               byte[] rec2Allop = new byte[256];
               byte[] sendAllop = Encoding.ASCII.GetBytes("ALLOP;" + "\n");
               int byteSendALLOP = sender.Send(sendAllop);
              // byteSendALLOP = sender.Send(sendPass);
               byteSendALLOP = sender.Receive(rec2Allop);
               Console.WriteLine(Encoding.ASCII.GetString(rec2Allop));

               string getUser = Console.ReadLine();



               
               sender.Close();
           }
           catch (SocketException e)
           {

               
               Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
             
               sender.Close();
             
           }
       }

PMEmail Poster
Top
John Galt
Публикувано на: 08-01-2018, 15:53
Quote Post



Име:
Група: Форумен член
Ранг: Новопостъпил

Мнения: 6
Регистриран на: 05.01.18



Предполагам, че Send() мож еда изпрати по-малко байтове от колкото искаш, а като те гледам никъде не проверяваш колко са изпратени и не обработваш случая когато не е изпратено цялото съобщение на веднъж. Например искаш да изпратиш 100 бата. Изпратени са 10. пращай в цикъл докато не изпратиш и останалите 90


--------------------
“If any part of your uncertainty is a conflict between your heart and your mind—follow your mind.”
PMEmail Poster
Top
patrik5
Публикувано на: 08-01-2018, 18:35
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 241
Регистриран на: 07.10.11



Send() бaйт по бaйт ли изпрaщa? Ще пробвaм дa го вкaрaм в цикъл, мислех че изпрaщa целия стринг
PMEmail Poster
Top
John Galt
Публикувано на: 08-01-2018, 18:46
Quote Post



Име:
Група: Форумен член
Ранг: Новопостъпил

Мнения: 6
Регистриран на: 05.01.18



QUOTE (patrik5 @ 08-01-2018, 18:35)
Send() бaйт по бaйт ли изпрaщa? Ще пробвaм дa го вкaрaм в цикъл, мислех че изпрaщa целия стринг

Не, праща много байтове, но няма гаранция колко ще изпрати - може всичките, а може и само един - тоест след като върне резултат трябва да провериш колко е изпратила и ако е по-малко от желания брой да го доизпратиш допълнително, после пак проверяваш и т.н.


--------------------
“If any part of your uncertainty is a conflict between your heart and your mind—follow your mind.”
PMEmail Poster
Top
patrik5
Публикувано на: 10-01-2018, 11:53
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 241
Регистриран на: 07.10.11



Нещо не мога да проверя, трябва да изпращам докато не получа отговора, който чакам ли, може ли някакъв примерен код?
PMEmail Poster
Top
Набухвател
Публикувано на: 10-01-2018, 12:23
Quote Post



Име: Др. Йоткерь
Група: Форумен член
Ранг: Активен

Мнения: 150
Регистриран на: 09.01.18



Нещо такова

CODE
byte[] data = {.....} //1024 bytes примерно

for(int allSent = 0; allSent < data.length;){
   int sentNow = socket.send(data, allSent, data.length - allSent);
   allSent += sentNow;
}


--------------------
PMEmail Poster
Top
thrawn
Публикувано на: 10-01-2018, 16:55
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1580
Регистриран на: 17.01.17



Проблемът не е в изпращането а в четенето. ОС се грижи да буферира и изпрати целия изход. Но при четенето нещата са по-сложни, защото не се знае какво има да дойде. Затова се ползват всякакви фокуси - изпращат се размери на пакет, използват се стоп данни или най-простото - чете се с фиксиран таймаут (достатъчен за да гарантира получаването на целия пакет).

Това е и причината да работи в дебъг режим - просто времето за преход между инструкциите нараства.
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (2) 1 [2]  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2018 | BG Development | All Rights Reserved
RSS 2.0