У меня есть этот код, я запускаю клиент с виртуальной машины на том же ПК, на котором он может подключаться, но он никогда не получит сообщение LOGIN, что может быть причиной?tcp socket server не отправляет
Не уверен насчет отправки flags
аргумент установлен вправо.
static const char *LOGIN = "LOGIN\n";
int main()
{
int s = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr;
socklen_t addrlen = sizeof(addr);
//initialize structure
bzero(&addr, addrlen);
addr.sin_family = AF_INET;
addr.sin_port = htons(6666);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(s, (struct sockaddr *)&addr, addrlen);
listen(s, 1);
struct sockaddr_in client_addr;
socklen_t client_addrlen = sizeof(client_addr);
int c = accept(s, (struct sockaddr *)&client_addr, &client_addrlen);
char *msg = new char[15];
//print client address
char * buf = new char[16];
inet_ntop(AF_INET, &(client_addr.sin_addr.s_addr), buf, 16);
cout << "Client connected: " << buf << endl;
cout << "---------------------" << endl;
send(c, LOGIN, sizeof(LOGIN), 0);
close(c);
close(s);
return 0;
}
Хорошим началом является проверка на наличие ошибок. Все эти системные вызовы могут возвращаться с ошибкой (они возвращают значение '-1'), и в этом случае вы должны проверить [' errno'] (http://man7.org/linux/man-pages/man3/errno. 3.html), чтобы увидеть, что пошло не так. Вы можете использовать, например. ['perror'] (http://man7.org/linux/man-pages/man3/perror.3.html), чтобы распечатать сообщение или использовать [' strerror'] (http://man7.org/ linux/man-pages/man3/strerror.3.html), чтобы получить строку для печати из кода ошибки. –