Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.16;
Скачать: CL | DM;

Вниз

Подключение через Socket по WinApi помогите!!!!!   Найти похожие ветки 

 
BlackLord ©   (2002-03-02 16:41) [0]

Как осуществить связь сервера и клиента TCP/IP с помащью WinApi пожайлуста покажите пример без VCL


 
VuDZ ©   (2002-03-02 18:49) [1]

а оно тебе надо?
читай в MSDN про socket(), recv(), accept(), bind() - много интересного узнаешь


 
SV ©   (2002-03-02 20:04) [2]

Вот пример, правда под UNIX, но сокеты и в Африке сокеты. Это простейший WEB-сервак.
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>

#define PORTNUM 8080
#define BACKLOG 5
#define BUFLEN 80

#define FNFSTR "404 Error File Not Found "
#define BRSTR "Bad Request "

int main(int argc, char **argv)
{
struct sockaddr_in own_addr, party_addr;
int sockfd, newsockfd, filefd;
int party_len;
char buf[BUFLEN];
int len;
int i;
/* создаем сокет */
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("can"t create socket\n");
return 0;
}
/* связываем сокет */
memset(&own_addr, 0, sizeof(own_addr));
own_addr.sin_family = AF_INET;
own_addr.sin_addr.s_addr = INADDR_ANY;
own_addr.sin_port = htons(PORTNUM);
if (bind(sockfd, (struct sockaddr *) &own_addr,
sizeof(own_addr)) < 0)
{
printf("can"t bind socket!");
return 0;
}

/* начинаем обработку запросов на соединение */
if (listen(sockfd, BACKLOG) < 0)
{
printf("can"t listen socket!");
return 0;
}

while (1) {
memset(&party_addr, 0, sizeof(party_addr));
party_len = sizeof(party_addr);
/* создаем соединение */
if ((newsockfd = accept(sockfd, (struct sockaddr *)
&party_addr, &party_len)) < 0)
{
printf("error accepting connection!");
return 0;
}

if (!fork())
{
/*это – сын, он обрабатывает запрос и посылает ответ*/
close(sockfd); /* этот сокет сыну не нужен */
if ((len = recv(newsockfd, &buf, BUFLEN, 0)) < 0)
{
printf("error reading socket!");
return 0;
}
/* разбираем текст запроса */
printf("received: %s \n", buf);
if (strncmp(buf, "GET /", 5))
{ /*плохой запрос!*/
if (send(newsockfd, BRSTR, strlen(BRSTR) + 1, 0) != strlen(BRSTR) + 1)
{
printf("error writing socket!");
return 0;
}

shutdown(newsockfd, 1);
close(newsockfd);
return 0;
}

for (i=5;buf[i] && (buf[i] > " ");i++);
buf[i] = 0;
/* открываем файл */
if((filefd = open(buf+5, O_RDONLY)) < 0) {
/* нет файла! */
if (send(newsockfd, FNFSTR, strlen(FNFSTR) + 1, 0) != strlen(FNFSTR) + 1)
{
printf("error writing socket!");
return 0;
}
shutdown(newsockfd, 1);
close(newsockfd);
return 0;
}

/* читаем из файла порции данных и посылаем их клиенту */
while (len = read(filefd, &buf, BUFLEN))
if (send(newsockfd, buf, len, 0) < 0) {
printf("error writing socket!");
return 0;
}
close(filefd);
shutdown(newsockfd, 1);
close(newsockfd);
return 0;
}

/* процесс – отец. Он закрывает новый сокет и
продолжает прослушивать старый */
close(newsockfd);
}
}


 
SV ©   (2002-03-02 20:08) [3]

P.S. Здесь исп. Сокеты 1.1 Если надо 2.0 смотри http://www.socketaddr.com
/Удачи/
/SV/



Страницы: 1 вся ветка

Текущий архив: 2002.05.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
1-49926
Riko
2002-05-03 15:15
2002.05.16
Версия Винды...


3-49846
Дмитрий Ковба
2002-04-18 19:13
2002.05.16
Интересный вопрос: сортировка связаных таблиц


6-50062
dimmu
2002-02-19 19:42
2002.05.16
Использование TTcpServer/TTcpClient и TServerSocket/TClientSocket


3-49849
emice
2002-04-19 02:23
2002.05.16
БД без db компонентов Помогите пожалуйста


3-49863
Chuvi
2002-04-19 12:28
2002.05.16
Подскажите пожалуста почему не работает эта чачть запроса ?