Каталог статей

Главная » Статьи » C/С++

Пример работы с сокетами для Window
Писал, когда сам разбирался с этим делом. На базе этого простого примера написано (точнее не совсем на его базе, а скорее при его участии) пара серьезных программок. 

Все просто, как в танке. По исходникам разберетесь. 
makefile
all: socket.cpp config.h socket.h
  $(CC) socket.cpp
socket.cpp
#include "stdio.h";
#include "socket.h";
#include "config.h";

static char Rec[2048000];

bool SendString(SOCKET s,char* str) {
 int cnt=send(s,str,strlen(str),0);
 if (cnt==SOCKET_ERROR) return(false); else return(true);
 }

char* GetString(SOCKET s) {
 char *str;
 char InBuff[2048];
 int cnt;
 
 strcpy("",Rec);
 while (cnt!=0) {
  memset(&InBuff,0,2048);
  cnt=recv (s, (char*)&InBuff, sizeof(InBuff),0);
  strcat(Rec,InBuff);
  }
 return((char*)&Rec);
 }


int OpenURL(char *url) {
 char *none="";
 char query[2048];
 struct sockaddr_in ssin;
 struct hostent* hp;
 unsigned char strHlp[2048], *pch;
 int PortNum;
 char *http_host;
 char *http_path;

 if (memcmp(url,"HTTP://",7)!=0 && memcmp(url,"http://",7)!=0) return(7);
 url+=7;
 if (WSAStartup(MAKEWORD(1,1),&lpWSAData)!=0) return(1);
 // используем Default'овый номер порта - 80, если не задан другой
 strcpy(strHlp,url);
 pch = strchr((char*)strHlp,':');
 if (pch==NULL) {
  PortNum = 80;
  pch = strchr((char*)strHlp,'/');
  if (pch!=NULL) {
  pch[0] = '\0';
  http_path=pch+1;
  }
  else {
  http_path=none;
  }
  }
 else {
  pch[0] = '\0';
  pch++;
  char *pch1 = strchr((char*)pch,'/');
  if (pch1!=NULL) {
  pch1[0] = '\0';
  http_path=pch1+1;
  }
  else {
  http_path=none;
  }
  PortNum = atoi(pch);
  if(PortNum==0) PortNum = 80;
  }

 // Поучаем IP по имени
 if ((hp=gethostbyname(strHlp))==NULL) return(1);
 http_host=strHlp;

 memset ((char *)&ssin, 0, sizeof(ssin));
 ssin.sin_family = AF_INET;
 ssin.sin_addr.s_addr = htonl(INADDR_ANY);
 ssin.sin_port = 0;
 bind (s, (struct sockaddr *)&ssin, sizeof(ssin));

 s=socket(AF_INET, SOCK_STREAM, 0);
 if (s==INVALID_SOCKET) return(4);

 ssin.sin_family = AF_INET;
 ssin.sin_addr.S_un.S_un_b.s_b1 = hp->h_addr[0];
 ssin.sin_addr.S_un.S_un_b.s_b2 = hp->h_addr[1];
 ssin.sin_addr.S_un.S_un_b.s_b3 = hp->h_addr[2];
 ssin.sin_addr.S_un.S_un_b.s_b4 = hp->h_addr[3];
 ssin.sin_port = htons(PortNum);

 printf("Conecting to %d.%d.%d.%d...",
  (unsigned char)hp->h_addr[0],
  (unsigned char)hp->h_addr[1],
  (unsigned char)hp->h_addr[2],
  (unsigned char)hp->h_addr[3]);
 if (connect(s, (sockaddr *)&ssin, sizeof(ssin))==-1) return(3);
 printf("Ok\n");

 strcpy(query,"GET /");
 strcat(query,http_path);
 strcat(query," HTTP/1.0\nHost: ");
 strcat(query,http_host);
 strcat(query,"\nUser-agent: ");
 strcat(query,http_user_agent);
 strcat(query,"\nAccept: */*\n\n");

 printf("%s",query);

 if (!SendString(s,query)) return(5);
 char* str=GetString(s);
 printf("%s",str);
 return(0);
 }

void CloseURL(void) {
 WSACleanup();
 }
   
void main(void) {  
 int err=OpenURL("http://www.codenet.ru/");
 if (err!=0) {
  printf("Error #%d: WSABASEERR+%d\n",err,
  WSAGetLastError()-WSABASEERR);
  }
 }
config.h

Этот модуль содержит настройки...точнее одну настройку - то что сервер получит в качестве HTTP_USER_AGENT. 
char *http_user_agent="Search Engine";
socket.h
#include <windows.h>

int s;
WSADATA lpWSAData;

Категория: C/С++ | Добавил: virusik (03.07.2009)
Просмотров: 748 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:
вход на сайт
Категории раздела
C/С++ [24]
статьи о языке C/С++
Visual FoxPro [1]
информация о языке Visual FoxPro
.NET [24]
статьи о языке программирования .NET
ваши статьи [4]
здесь вы можете размещать сваи статьи
модинг [4]
статьи о модинге ПК
Поиск по сайту
наши опросы
каким браузерам вы пользуетесь
Всего ответов: 21
Мини-чат
помощь проекту
помоги проекту
ЯндексЯндекс. ДеньгиХочу такую же кнопку
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Каталог http://www.internetmir.ru Лучшие сайты интернета в каталоге Intenetmir
  • Delphi.int.ru - Сообщество программистов: общение, помощь, обмен опытом.
    реклама 88х31
    Каталог сайтов. Раскрутка. Хостинг. Каталог ссылок. Информационный портал - Старого.NET Шпоры, курсовые, пособия, рефераты, ВУЗы.
    Статистика
    webgari.com Рейтинг сайтов
    Раскрутка сайтов
    Яндекс цитирования
    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0