У меня есть этот код, простой пример кода на сокете C, он отлично работает для простого сервидора, который я написал и запустил на локальном компьютере, но если я попытаюсь, например, получить HTML-код с веб-страницы Google, это значительно задержит время ответить и вернуть пустой буфер.
мой код:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <errno.h>
void bye(char * mmo);
void bye(char * mm) {
printf("%s\n", mm);
exit(0);
}
int main(void) {
int tcpSocket, port;
char buffer[256],err[256], *servername,* mm;
struct hostent *server;
struct sockaddr_in serverAddr;
servername = "google.com";
tcpSocket = socket(AF_INET, SOCK_STREAM, 0);
port = 80;
server = gethostbyname(servername);
mm = "baa";
if(tcpSocket < 0) {
sprintf(err, "Can't to initialize TCP socket communication(%s).", strerror(errno));
bye(err);
}
if(NULL == server) {
bye("Server not found");
}
memset(&serverAddr, 0, sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
memcpy(&serverAddr.sin_addr.s_addr,
server->h_addr,
server->h_length);
serverAddr.sin_port = htons(port);
if(connect(tcpSocket, (struct sockaddr *) &serverAddr, sizeof(serverAddr)) < 0) {
sprintf(err, "failed internet connection. %s", strerror(errno));
bye(err);
}
if(write(tcpSocket, mm, strlen(mm)) < 0) {
sprintf(err, "Can't send.(%s)\n", strerror(errno));
bye(err);
}
memset(buffer, 0, sizeof(buffer));
while(read(tcpSocket, buffer, 255) < 0) {
printf("%s", buffer);
}
close(tcpSocket);
printf("done!\n");
return 0;
}
Заранее спасибо .:)