Winsock и PuTTY

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by defe, 17 Jan 2016.

  1. defe

    defe New Member

    Joined:
    17 Jan 2016
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Подскажите, может сталкивался кто уже с такой проблемой. Принимаю сообщения через recv от клиента PuTTY и после каждого сообщения почему то приходит комбинация символов разрыва строки \r\n отдельным сообщением. Не хотелось бы отдельно создавать recv для приёма пустого сообщения. В PuTTY устанавливаю raw соединение по 1777 порту.
     
    #1 defe, 17 Jan 2016
    Last edited: 17 Jan 2016
  2. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    defe, с таким скудным описанием вам, скорее всего, никто не поможет тут, какой тип соединения используете хотя бы написали в PuTTY, какие параметры подключения выставлены, а так можно в настройках терминала посмотреть, и на кофейной гуще погадать :D
     
  3. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    Как бы все логично putty делает, все что вводится, то и отправляется серверу. Единственное клиент может по разному вести себя в зависимости от настроек. Для примера взять обычный tcp сервер на node:
    Code:
    net = require('net');
    
    net.createServer(function (socket) {
      socket.name = socket.remoteAddress + ":" + socket.remotePort;
      console.log('Connect client: ', socket.name);
    
      socket.write("Welcome " + socket.name + "\r\n");
    
      socket.on('data', function (data) {
      console.log('bin: ', data);
      console.log('text: ', data.toString());
      });
    
      socket.on('end', function () {
      console.log('Client disconnect');
      });
    
    }).listen(1777);
    console.log("Server running at port 1777\n");
    
    и подключиться к нему в режиме Raw, при этом в параметрах Terminal -> Line discipline option -> Local line editing выставить Force on.
    В результате вы можете спокойно набирать текст, например "123", и он уйдет на сервер только после нажатия enter, а в логе сервера вы увидите что-то типа:
    Code:
    Connect client:  ::1:64895
    bin:  <Buffer 31 32 33 0d 0a>
    text:  123
    
    если же выставить Force off, то клиент будет себя вести по другому и тогда вы уже получите, при вводе 123, что-то такое:
    Code:
    Connect client:  ::1:64903
    bin:  <Buffer 31>
    text:  1
    bin:  <Buffer 32>
    text:  2
    bin:  <Buffer 33>
    text:  3
    bin:  <Buffer 0d>
    text: 
    то есть символы будут отправляться сразу, по мере набора, а при нажатии на enter будет отправлен CR