Gooch
20-06-2013, 22:31
Всем привет! Есть клиент:
#include <stdio.h>
#include <string.h>
// Включение библиотеки Winsock2
#include <winsock2.h>
#include <windows.h>
// Порт, который использует сервер
#define PORT 13
// Адрес сервера
#define SERVERADDR "192.168.160.1"
int main ( int argc, char* argv [ ] ) {
char buff [ 1024 ] ;
printf ( "TCP Client \n" );
// Инициализация библиотеки Winsock2.
// Если инициализация не удалась, то функция
// возвращает ненулевое значение.
if(WSAStartup(0x202, (WSADATA *) &buff[0])) {
printf("WSAStartup error %d\n",
WSAGetLastError( ));
return -1;
}
// Создается сокет.
// Если функция завершилась успешно то она
// возвращает дескриптор сокета.
SOCKET my_sock ;
my_sock=socket ( AF_INET, SOCK_STREAM, 0 );
if ( my_sock < 0 ) {
printf("Socket error %d\n",
WSAGetLastError( ));
return -1;
}
// Заполнение структуры sockaddr_in
sockaddr_in dest_addr ;
dest_addr.sin_family=AF_INET;
dest_addr.sin_port=htons ( PORT );
// Преобразование ip-адреса из символьного
// в сетевой формат.
dest_addr.sin_addr.s_addr=inet_addr(SERVERADDR);
// Попытка установки соединения.
// Если по каким-то причинам установить соединение
// не удается, то функция возвращает ненулевое
// значение.
int conn = connect(my_sock,
(sockaddr *) &dest_addr, sizeof(dest_addr));
if (conn !=0 ) {
printf ("Connect error %d\n",
WSAGetLastError( ));
return -1;
}
printf("Соединение с %s установлено",
SERVERADDR);
int nsize;
bool repeat = true;
while ( repeat ) {
// Чтение ответа сервера
nsize = recv(my_sock, &buff[0],
sizeof(buff)-1,0);
if(nsize == 0) {
// Если прочитано 0 байт, это означает, что
// соединение закрыто сервером. Выполнение
// программы завершается
repeat = false;
printf ( " Exit " );
closesocket ( my_sock ) ;
WSACleanup ( ) ;
return 0;
} else if(nsize == SOCKET_ERROR) {
// Обработка ошибки чтения из сокета
repeat = false;
printf("Recv error %d\n",
WSAGetLastError( ));
closesocket ( my_sock ) ;
WSACleanup ( ) ;
return -1;
} else {
// Данные прочитаны успешно
// Добавление завершающего ноля в конец строки
buff[ nsize ] = 0;
// Вывод на экран
printf ( " Date: %s ", buff ) ;
}
}
}
не могу скомпилировать у себя в vs 2010, как бы на с++ вообще не шарю, визуалстудиа на с# настраивал и начинал изучать, а тут задачка от препода, при компиляция вываливается ошибка с4627 по библиотекам, я так понимаю winsock2.h string.h windows.h не подключается, излазил уже кучу форумов, не могу разобраться :( Очень прошу помощи.
#include <stdio.h>
#include <string.h>
// Включение библиотеки Winsock2
#include <winsock2.h>
#include <windows.h>
// Порт, который использует сервер
#define PORT 13
// Адрес сервера
#define SERVERADDR "192.168.160.1"
int main ( int argc, char* argv [ ] ) {
char buff [ 1024 ] ;
printf ( "TCP Client \n" );
// Инициализация библиотеки Winsock2.
// Если инициализация не удалась, то функция
// возвращает ненулевое значение.
if(WSAStartup(0x202, (WSADATA *) &buff[0])) {
printf("WSAStartup error %d\n",
WSAGetLastError( ));
return -1;
}
// Создается сокет.
// Если функция завершилась успешно то она
// возвращает дескриптор сокета.
SOCKET my_sock ;
my_sock=socket ( AF_INET, SOCK_STREAM, 0 );
if ( my_sock < 0 ) {
printf("Socket error %d\n",
WSAGetLastError( ));
return -1;
}
// Заполнение структуры sockaddr_in
sockaddr_in dest_addr ;
dest_addr.sin_family=AF_INET;
dest_addr.sin_port=htons ( PORT );
// Преобразование ip-адреса из символьного
// в сетевой формат.
dest_addr.sin_addr.s_addr=inet_addr(SERVERADDR);
// Попытка установки соединения.
// Если по каким-то причинам установить соединение
// не удается, то функция возвращает ненулевое
// значение.
int conn = connect(my_sock,
(sockaddr *) &dest_addr, sizeof(dest_addr));
if (conn !=0 ) {
printf ("Connect error %d\n",
WSAGetLastError( ));
return -1;
}
printf("Соединение с %s установлено",
SERVERADDR);
int nsize;
bool repeat = true;
while ( repeat ) {
// Чтение ответа сервера
nsize = recv(my_sock, &buff[0],
sizeof(buff)-1,0);
if(nsize == 0) {
// Если прочитано 0 байт, это означает, что
// соединение закрыто сервером. Выполнение
// программы завершается
repeat = false;
printf ( " Exit " );
closesocket ( my_sock ) ;
WSACleanup ( ) ;
return 0;
} else if(nsize == SOCKET_ERROR) {
// Обработка ошибки чтения из сокета
repeat = false;
printf("Recv error %d\n",
WSAGetLastError( ));
closesocket ( my_sock ) ;
WSACleanup ( ) ;
return -1;
} else {
// Данные прочитаны успешно
// Добавление завершающего ноля в конец строки
buff[ nsize ] = 0;
// Вывод на экран
printf ( " Date: %s ", buff ) ;
}
}
}
не могу скомпилировать у себя в vs 2010, как бы на с++ вообще не шарю, визуалстудиа на с# настраивал и начинал изучать, а тут задачка от препода, при компиляция вываливается ошибка с4627 по библиотекам, я так понимаю winsock2.h string.h windows.h не подключается, излазил уже кучу форумов, не могу разобраться :( Очень прошу помощи.