При использовании system ("telnet ") нужно чтобы не останавливало программу. - C (СИ)
Формулировка задачи:
Привет всем.
Я хочу использовать в программе на Си функцию командной строки system ("telnet ").
Не могу найти кое что.
Вот у меня есть код на Си:
Мне нужно чтобы при определенном исходе срабатывал один из printf... но суть функции telnet такая , что если порт открыт, то она очищиет экран командной строки и ждет ...
Может кто-то знает, как можно отменить ее выполнение? мне нужно только чтобы она узнала открыт порт или нет и все. Или же выполнилась, но вернула управление моей программе.
Ping для моей задачи не подходит. Можно проверять соккетами на предмет успешного подключения, но вот хотелось бы вот так , через system.
Заранее благодарю за любые соображения.
// проверяем открыт ли порт 80 на google
printf ("YES");
if (system ("telnet [url]www.google.com[/url] 80" ))
else
printf ("NO");Решение задачи: «При использовании system ("telnet ") нужно чтобы не останавливало программу.»
textual
Листинг программы
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
int
main(int argc, char** argv)
{
WSADATA wsaData;
int res = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (res != NO_ERROR) {
printf("WSAStartup function failed with error: %d\n", res);
return 1;
}
SOCKET s;
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s == INVALID_SOCKET) {
printf("socket function failed with error: %d\n", WSAGetLastError());
WSACleanup();
return 1;
}
hostent* host;
char* ip;
host = gethostbyname("www.google.com");
ip = inet_ntoa (*(struct in_addr *)*host->h_addr_list);
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = inet_addr(ip);
sin.sin_port = htons(80);
res = connect(s, (SOCKADDR*)&sin, sizeof(sin));
if (res == SOCKET_ERROR) {
printf("connect function failed with error: %d\n", WSAGetLastError());
res = closesocket(s);
if (res == SOCKET_ERROR)
printf("closesocket function failed with error: %d\n", WSAGetLastError());
WSACleanup();
return 1;
}
printf("Connected to server.\n");
res = closesocket(s);
if (res == SOCKET_ERROR) {
printf("closesocket function failed with error: %d\n", WSAGetLastError());
WSACleanup();
return 1;
}
WSACleanup();
return 0;
}