Небольшой вопрос: как я могу использовать сокеты Linux для проверки подключения к Интернету внутри программы C? Я слышал, что это самый простой и подходящий метод (вместо вызова ping программы, например), но я просто не знаю, как это сделать.Проверьте подключение к Интернету с разъемами
ответ
измените его, как хотите. :)
void *parser_online(void *garbage)
{
int sockfd,val;
char buffer[MAX_LINE];
struct hostent *google_ent=NULL;
struct sockaddr_in google_addr;
sockfd = -1;
if((google_ent = gethostbyname("www.google.com")) != NULL)
{
if((sockfd = socket(google_ent->h_addrtype,SOCK_STREAM,IPPROTO_TCP)) != -1)
{
val = 1;
if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR, (char *) &val, sizeof(val)) == 0 && setsockopt(sockfd,IPPROTO_TCP,TCP_NODELAY, (char *) &val, sizeof(val)) == 0)
{
google_addr.sin_family = google_ent->h_addrtype;
memcpy(&(google_addr.sin_addr), google_ent->h_addr, google_ent->h_length);
google_addr.sin_port = htons(80);
if(connect(sockfd,(struct sockaddr *) &google_addr,sizeof(google_addr)) == 0)
{
if(write(sockfd,"GET /index.html HTTP/1.1\r\n\r\n", 29) >= 28)
{
shutdown(sockfd, SHUT_WR);
if(read(sockfd, buffer, MAX_LINE) != -1) // all right!
{
close(sockfd);
return (void *) 1;
}
else
report_error("read()",1,0,verbose);
}
else
report_error("write()",1,0,verbose);
}
else
report_error("connect()",1,0,verbose);
}
else
report_error("setsockopt()",1,0,verbose);
}
else
report_error("socket()",1,0,verbose);
}
else
report_error("cannot resolve IP for mom Google.",0,0,error); // this is is the most common error.
if(sockfd!=-1)
close(sockfd);
return (void *) 0; // no internet
}
извините .... Я забыл сообщить вам, что вы должны включить sys/socket.h netinet/tcp.h netdb.h netinet/in.h Я думаю, что это все .... если вы компиляции ошибок просто сделать: 'Grep -nr "MISSING_MACRO"/ USR/включать ' –
ах! если вы не хотите проверять HTTP, а только статус Интернета, вы можете остановить вызов 'connect()'. –
Этот код использует имя хоста. Лучше проверить ip-адрес, например 8.8.8.8. Чтобы отделить случай: связь нарушена от dns, разрешение нарушено – ArthurLambert
Попробуйте подключиться к известному хосту (скажем, google.com) в хорошо открытом порту, например, 80. Если он не работает, есть хороший шанс, что интернет не работает. Вот учебник сокета, который поможет вам начать работу: http://www.linuxhowtos.org/C_C++/socket.htm.
(Не был ли мой нисходящий, все еще :) Может быть, небрежная терминология? «Интернет не работает»? Это глупо, поскольку Интернет никогда не падает (в целом). Сетевые инженеры ссылаются на такие проблемы, как «потеря сетевого подключения», «проблемы маршрутизации», «недоступный хост/сеть/порт» и т. Д. – Jens
- 1. Проверьте подключение к Интернету или проверьте подключение к Интернету постоянно
- 2. Проверьте подключение к Интернету?
- 3. Проверьте подключение к Интернету
- 4. Проверьте подключение к Интернету
- 5. Мгновенно проверьте подключение к Интернету
- 6. Android, проверьте подключение к интернету
- 7. Проверьте реальное подключение к Интернету
- 8. Проверьте подключение к Интернету INTENT
- 9. Проверьте фактическое подключение к Интернету
- 10. Проверьте подключение к Интернету OKHTTP
- 11. Проверьте подключение к Интернету C#
- 12. Проверьте подключение к Интернету с Swift
- 13. Проверьте подключение к Интернету с помощью offline.js
- 14. Проверьте подключение к Интернету с jquery
- 15. Подключение ПК с разъемами
- 16. Проверьте подключение к Интернету во Flash?
- 17. Проверьте подключение к Интернету во время работы
- 18. Проверьте подключение к Интернету в Silverlight
- 19. javascript/dashcode: проверьте подключение к Интернету
- 20. Adobe Air - Проверьте подключение к Интернету
- 21. Проверьте подключение к Интернету на C++?
- 22. Проверьте, доступно ли подключение к Интернету
- 23. Проверьте подключение к Интернету в iOS 9?
- 24. Проверьте подключение к Интернету от Unity
- 25. Windows Phone 8.1: Проверьте подключение к Интернету
- 26. Android: проверьте подключение к Интернету в webview
- 27. Проверьте подключение к Интернету в Swift
- 28. Проверьте подключение к Интернету из Excel VBA
- 29. Проверьте подключение к Интернету при нажатии кнопки
- 30. проверьте, есть ли подключение к Интернету
[Stack Overflow это не ваш личный научный сотрудник.] (Http://meta.stackexchange.com/a/128553/133242) –
[Проверить] (http://www.linuxforums.org /forum/programming-scripting/146792-cc-program-check-internet-connection.html) it.I надеюсь, что это сработает. – vikky