Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - сокеты ошибка при компилировании

Ответить
Настройки темы
C/C++ - сокеты ошибка при компилировании

Аватара для Gooch

Ветеран


Сообщения: 876
Благодарности: 160


Конфигурация

Профиль | Отправить PM | Цитировать


Всем привет! Есть клиент:
читать дальше »

#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 не подключается, излазил уже кучу форумов, не могу разобраться Очень прошу помощи.

-------
Не забываем жмакать "полезное сообщение"


Отправлено: 22:31, 20-06-2013

 

Аватара для deviance

Пользователь


Сообщения: 123
Благодарности: 43

Профиль | Отправить PM | Цитировать


Gooch, исходя из описания ошибки, Вы в своем проекте не отключили использование "precompiled headers". Решение есть по ссылке.

Отправлено: 00:00, 21-06-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Gooch

Ветеран


Сообщения: 876
Благодарности: 160

Профиль | Отправить PM | Цитировать


Цитата deviance:
precompiled headers »
отключал, после этого начинает ругаться примерно так: LNK2019 и в нем все что касается WSA, при этом не показывает строки в которых ошибка. И ещё вопрос, когда писал на с# у меня каждую команду подсвечивал VS да и предлагал варианты, а с с++ кроме как char и int ни чего не знает, так должно быть?

-------
Не забываем жмакать "полезное сообщение"


Отправлено: 08:41, 21-06-2013 | #3


Аватара для deviance

Пользователь


Сообщения: 123
Благодарности: 43

Профиль | Отправить PM | Цитировать


Gooch, ошибки линкера говорят о том, что линковать приложение нужно с библиотекой сокетов (ws2_32.lib). http://club.shelek.ru/viewart.php?id=35

Отправлено: 08:55, 21-06-2013 | #4


Аватара для Gooch

Ветеран


Сообщения: 876
Благодарности: 160

Профиль | Отправить PM | Цитировать


хорошо, может как то не правильно библиотеки подключаю? настройки проекта - линкер - input - в первой строке перечисление библиотек, добавил ws2_32.lib.

-------
Не забываем жмакать "полезное сообщение"


Отправлено: 20:16, 21-06-2013 | #5


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Чтобы не париться с указанием в настройках можно попробовать указать библиотеку директивой в коде после инклудов

#pragma comment (lib, "ws2_32.lib")
#pragma comment (lib, "wsock32.lib")

-------
Ehhh.. what's up, doc?..

Это сообщение посчитали полезным следующие участники:

Отправлено: 07:27, 24-06-2013 | #6


Аватара для Gooch

Ветеран


Сообщения: 876
Благодарности: 160

Профиль | Отправить PM | Цитировать


сегодня включил ноут и о чудо, заработало щас ошибки в коде ищу) спасибо что откликнулись.

-------
Не забываем жмакать "полезное сообщение"


Отправлено: 12:12, 24-06-2013 | #7


Аватара для Gooch

Ветеран


Сообщения: 876
Благодарности: 160

Профиль | Отправить PM | Цитировать


ап, вообщем есть код проги с моего верхнего поста в нормальном так сказать варианте, не могу разобраться с ошибками:

читать дальше »

Код: Выделить весь код
#include "stdafx.h"
#include <string.h>
#include <iostream>
// Включение библиотеки Winsock2 
#include <winsock2.h>
#include <windows.h>

// Порт, который использует сервер
#define PORT 1140  
// Адрес сервера
#define SERVERADDR "127.0.0.1"   

int main ( int argc, char* argv [ ] )
{	
	using namespace std;
    char buff [ 11000 ] ;
	int A, B, C, D, E, F, G, H, I, J;
	setlocale(LC_ALL, "Russian");
    printf ( "TCP Client \n" ); 
    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  dest_addr ;
    dest_addr.sin_family=AF_INET; 
    dest_addr.sin_port=htons ( PORT ); 
    dest_addr.sin_addr.s_addr=inet_addr(SERVERADDR);
    int nRecv = connect(my_sock, 
        (sockaddr *) &dest_addr, sizeof(dest_addr));
    if  (nRecv == SOCKET_ERROR) 
	{ 
		if (WSAGetLastError() == WSAEHOSTUNREACH)
	cout<<"Host unreachable" << endl;
	else
		printf ("Connect error %d\n", 
                  WSAGetLastError( ));
       return -1;
    }

    printf("Соединение с %s установлено", 
                SERVERADDR);

	char cmd[5];
    bool repeat = true;
	bool rpt;
	int n =0;

    do
	{
		cout << "Enter command (\\get or \\quit)" << endl;
		cin.getline (cmd, 10);
		strcat_s (cmd, "\n");
		int nRecv = send (my_sock, &cmd[0], strlen (cmd), 0);
		repeat = true;
		A=0; B=0; C=0; D=0; E=0; F=0; G=0; H=0; I=0; J=0;
		do
		{ ZeroMemory (buff, 11000);
		nRecv = recv (my_sock, &buff[0], sizeof (buff)- 1, 0);
		if (strstr (buff, "\n") != NULL)
		{
			rpt = false;
		}
		if (strstr (buff, "Closing connction") != NULL)
		{
			rpt = false;
			repeat = false;
			cout<<buff;
			break;
		}
		cout << buff;
		int len = strlen (buff);
		for (int i = 0; i<= len; i++)
		{
			switch (buff[i])
			{
			case 'a':A++; break;
			case 'b':B++; break;
			case 'c':C++; break;
			case 'd':D++; break;
			case 'e':E++; break;
			case 'f':F++; break;
			case 'g':G++; break;
			case 'h':H++; break;
			case 'i':I++; break;
			case 'j':J++; break;
			}
		}
		}
		while (rpt && nRecv > 0);
		cout << "a" << A << endl;
		cout << "b" << B << endl;
		cout << "c" << C << endl;
		cout << "d" << D << endl;
		cout << "e" << E << endl;
		cout << "f" << F << endl;
		cout << "g" << G << endl;
		cout << "h" << H << endl;
		cout << "i" << I << endl;
		cout << "j" << J << endl;
		if(nRecv == 0)
		{
			repeat = false;
			cout << "Ok..."<< endl;
		}
		else if(nRecv == SOCKET_ERROR)
		{
          printf ( " Recv error %d\n", WSAGetLastError());
          closesocket ( my_sock ) ;
          WSACleanup ( ) ;
          return -1;
        }
		else 
		{
			buff[nRecv] = 0;
			if(!strcmp(buff, "Closing connection")) break;
			printf("CryptoMessage: %s\n", buff);
		}
	
	
	closesocket (my_sock);
	WSACleanup ( ) ;
	return 0;
	}
	}


компилятор ругается на closesocket в конце кода, для интереса закоментил, он начал ругаться на код дальше и в итоге на закрытую скобку, помогите разобраться плюс ругался на strcat и заставил меня поставить strcat_s.

-------
Не забываем жмакать "полезное сообщение"


Последний раз редактировалось Delirium, 26-06-2013 в 13:09. Причина: Контрибьютору не уметь пользоваться тегами оформления кода - стыдно :)


Отправлено: 14:50, 25-06-2013 | #8


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Один из do у вас без закрывающего while - от этого ошибка.

-------
Ehhh.. what's up, doc?..


Отправлено: 10:00, 26-06-2013 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - сокеты ошибка при компилировании

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - Ошибка при компилировании karls000n@vk Программирование и базы данных 2 26-10-2012 20:22
C/C++ - Unix | Сокеты mrcnn Программирование и базы данных 1 15-07-2010 14:49
Проблема при пересылке текста через сокеты из win в nix. lytdybr Программирование в *nix 8 07-11-2007 23:42
сокеты E-mail Вебмастеру 11 12-08-2006 14:36
Delphi - Ошибка при компилировании на Delphi7 Guest Программирование и базы данных 10 09-08-2004 17:00




 
Переход