Консультация № 63735
22.11.2006, 16:16
0.00 руб.
0 2 2
Всем доброго времени суток!
Есть проблемка : при создании сокета, точнее при описании структуры sockaddr_in ВСЕ (Visual 6, borland c++ Builder и Microsoft C++ Borland X) присутствующие у меня среды разработки ругаются на строку dest.sin_family
Притом dest описан как struct sockaddr_in dest;
код программы в приложении! Ошибки там же, но в конце!
Ничего не понимаю, перерыл столько инфы, нигде ничего нет! Все просто объявляют эту структуру и все, ни у кого не возникает проблем (кроме меня)!
Притом ошибка интересна тем что в Buldere компоненты типа ClientSocket нормально работают!
Вопросс: зачем оно мне надо?
Ответ: хочу разобраться имеено с socket напрямую а не через прибамбасы!!!!
P.S.: ws2_32.lib в visual подключал к прокту отдельно, ошибка не в этом!

Приложение:
#include "stdafx.h"#include "stdio.h"#include "conio.h" // dlya clrscr()#include "winsock2.h"#include "windows.h"#pragma comment(lib, "ws2_32.lib")//#pragma link "ws2_32.lib"WORD wVersion=MAKEWORD(2,0);WSADATA wsaMyData;SOCKET serv;struct sockaddr_in dest;memset(&dest,0,sizeof(struct sockaddr_in));dest.sin_family=AF_INET;addr.sin_addr.s_addr=INADDR_ANY;socketaddr.sin_port=htons(8080);//---------------------------------------------------------------------------void GetMyHostName(void){char chInfo[64];if (gethostname(chInfo,sizeof(chInfo))) { printf("Not local host\n"); return; }else { printf(chInfo); printf(" GetHostName OK !!!!!\n"); }}//---------------------------------------------------------------------------//---------------------------------------------------------------------------void StartMyWinSocket (void){if (WSAStartup(wVersion, &wsaMyData)) { printf ("winsock not bi initialized !\n"); WSACleanup(); }else printf("Winsock initial OK !!!!\n");}//---------------------------------------------------------------------------//---------------------------------------------------------------------------void StopMyWinSocket (void){if (WSACleanup()) printf("Error Cleapir\n");else printf("Cleapir Good !!!!!\n");}//---------------------------------------------------------------------------//---------------------------------------------------------------------------void CreateMySocket(){serv = socket(PF_INET,SOCK_STREAM,0);if (serv==INVALID_SOCKET) { printf("Error create socket :-(\n"); }else printf("Now Socket are create!!!\n");}//---------------------------------------------------------------------------//---------------------------------------------------------------------------void CloseMySocket(){int err;err=closesocket(serv);if (err==INVALID_SOCKET) { printf("Error close socket :-(\n"); exit(1); }else printf("Now Socket are Close!!!\n");}//---------------------------------------------------------------------------void main(){//clrscr();printf("Hellow This is first Nooki‘s socket program\n");StartMyWinSocket();GetMyHostName();CreateMySocket();CloseMySocket();StopMyWinSocket();getch();}//-----------------------------------------------------------------------------------------------Configuration: mysockTEST - Win32 Debug--------------------Compiling...mysockTEST.cppC:\Program Files\Visual C++ 6\Common Files\MSDev98\MyProjects\mysockTEST\mysockTEST.cpp(12) : error C2501: ‘memset‘ : missing storage-class or type specifiersC:\Program Files\Visual C++ 6\Common Files\MSDev98\MyProjects\mysockTEST\mysockTEST.cpp(12) : error C2373: ‘memset‘ : redefinition; different type modifiers c:\program files\visual c++ 6\vc98\include\string.h(103) : see declaration of ‘memset‘C:\Program Files\Visual C++ 6\Common Files\MSDev98\MyProjects\mysockTEST\mysockTEST.cpp(12) : error C2078: too many initializersC:\Program Files\Visual C++ 6\Common Files\MSDev98\MyProjects\mysockTEST\mysockTEST.cpp(13) : error C2143: syntax error : missing ‘;‘ before ‘.‘C:\Program Files\Visual C++ 6\Common Files\MSDev98\MyProjects\mysockTEST\mysockTEST.cpp(13) : error C2501: ‘dest‘ : missing storage-class or type specifiersC:\Program Files\Visual C++ 6\Common Files\MSDev98\MyProjects\mysockTEST\mysockTEST.cpp(13) : error C2371: ‘dest‘ : redefinition; different basic types C:\Program Files\Visual C++ 6\Common Files\MSDev98\MyProjects\mysockTEST\mysockTEST.cpp(11) : see declaration of ‘dest‘C:\Program Files\Visual C++ 6\Common Files\MSDev98\MyProjects\mysockTEST\mysockTEST.cpp(13) : error C2143: syntax error : missing ‘;‘ before ‘.‘C:\Program Files\Visual C++ 6\Common Files\MSDev98\MyProjects\mysockTEST\mysockTEST.cpp(14) : error C2143: syntax error : missing ‘;‘ before ‘.‘C:\Program Files\Visual C++ 6\Common Files\MSDev98\MyProjects\mysockTEST\mysockTEST.cpp(14) : error C2501: ‘dest‘ : missing storage-class or type specifiersC:\Program Files\Visual C++ 6\Common Files\MSDev98\MyProjects\mysockTEST\mysockTEST.cpp(14) : error C2371: ‘dest‘ : redefinition; different basic types C:\Program Files\Visual C++ 6\Common Files\MSDev98\MyProjects\mysockTEST\mysockTEST.cpp(11) : see declaration of ‘dest‘C:\Program Files\Visual C++ 6\Common Files\MSDev98\MyProjects\mysockTEST\mysockTEST.cpp(14) : error C2143: syntax error : missing ‘;‘ before ‘.‘C:\Program Files\Visual C++ 6\Common Files\MSDev98\MyProjects\mysockTEST\mysockTEST.cpp(15) : error C2143: syntax error : missing ‘;‘ before ‘.‘C:\Program Files\Visual C++ 6\Common Files\MSDev98\MyProjects\mysockTEST\mysockTEST.cpp(15) : error C2501: ‘dest‘ : missing storage-class or type specifiersC:\Program Files\Visual C++ 6\Common Files\MSDev98\MyProjects\mysockTEST\mysockTEST.cpp(15) : error C2371: ‘dest‘ : redefinition; different basic types C:\Program Files\Visual C++ 6\Common Files\MSDev98\MyProjects\mysockTEST\mysockTEST.cpp(11) : see declaration of ‘dest‘C:\Program Files\Visual C++ 6\Common Files\MSDev98\MyProjects\mysockTEST\mysockTEST.cpp(15) : error C2143: syntax error : missing ‘;‘ before ‘.‘Error executing cl.exe.mysockTEST.exe - 15 error(s), 0 warning(s)

Обсуждение

Неизвестный
22.11.2006, 16:50
общий
это ответ
Здравствуйте, Nooki!

Программа здесь не полностью... Исправить можно примерно так:

struct sockaddr_in dest;
...
memset(&dest,0,sizeof(sockaddr_in));
dest.sin_family=AF_INET;
dest.sin_addr.s_addr=INADDR_ANY;
dest.sin_port=htons(8080);
....
давно
Академик
20764
1861
22.11.2006, 17:43
общий
это ответ
Здравствуйте, Nooki!

У вас не описана struct sockaddr_in (о чём на самом деле и сообщают компиляторы)
Не знаю где она описана в windows, но в unix-ах надо включить netinet/in.h:

#include <netinet/in.h>
Форма ответа