Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка при выходе WinSock2.0 C++ Builder / 3 сообщений из 3, страница 1 из 1
01.10.2007, 08:42:58
    #34837449
Begem0t!k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выходе WinSock2.0 C++ Builder
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
DWORD WINAPI ClientThread(LPVOID lpParam)
{
    SOCKET        sock=(SOCKET)lpParam;
    char          szRecvBuff[ 1024 ],
				  szSendBuff[ 1024 ];
    int           ret;

    while( 1 )
    {
        ret = recv(sock, szRecvBuff,  1024 ,  0 );
        if (ret ==  0 )
            break;
        else if (ret == SOCKET_ERROR)
        {
			MessageBox( 0 , "Recive data filed", "Error",  0 );
            break;
        }
        szRecvBuff[ret] = '\0';

	strcpy(szSendBuff, "Command get OK");

        ret = send(sock, szSendBuff, sizeof(szSendBuff),  0 );
        if (ret == SOCKET_ERROR)
        {
           break;
        }
    }
    return  0 ;
}
DWORD WINAPI NetThread(LPVOID lpParam)
{
    SOCKET        sServerListen,
                  sClient;
    struct sockaddr_in localaddr,
                       clientaddr;



    int           iSize;

	sServerListen = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    if (sServerListen == SOCKET_ERROR)
    {
		MessageBox( 0 , "Can't load WinSock", "Error", 0);
        return 0;
    }
    localaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    localaddr.sin_family = AF_INET;
    localaddr.sin_port = htons(5050);

    if (bind(sServerListen, (struct sockaddr *)&localaddr, 
            sizeof(localaddr)) == SOCKET_ERROR)
    {
		MessageBox(0, "Can't bind", "Error",  0 );
        return  1 ;
    }
    
    MessageBox( 0 , "Bind OK", "Error",  0 );

    listen(sServerListen,  4 );

    MessageBox( 0 , "Listen OK", "Error",  0 );
    while ( 1 )
    {
        iSize = sizeof(clientaddr);
        sClient = accept(sServerListen, (struct sockaddr *)&clientaddr,
                        &iSize);        
        if (sClient == INVALID_SOCKET)
        {
			MessageBox( 0 , "Accept filed", "Error",  0 );
            break;
        }

        hThread = CreateThread(NULL,  0 , ClientThread,
                    (LPVOID)sClient,  0 , &dwThreadId);
        if (hThread == NULL)
        {
			MessageBox( 0 , "Create thread filed", "Error",  0 );
            break;
        }
        CloseHandle(hThread);
    }
    closesocket(sServerListen);
    return  0 ;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   WSADATA       wsd;
    if (WSAStartup(MAKEWORD( 2 , 2 ), &wsd) !=  0 )
	{
		MessageBox( 0 , "Can't load WinSock", "Error",  0 );
		return ;
	}


   DWORD         dwNetThreadId;
	hNetThread = CreateThread(NULL,  0 , NetThread,
                     0 ,  0 , &dwNetThreadId);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
//ExitThread(  dwNetThreadId);
  //ExitThread(dwThreadId);
  CloseHandle(hNetThread);
  CloseHandle(hThread);
  WSACleanup();
}
//---------------------------------------------------------------------------

Сокет биндиться но после закрытия окна вылазит ошибка Access voliation at address ...
...
Рейтинг: 0 / 0
01.10.2007, 08:47:38
    #34837452
Begem0t!k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выходе WinSock2.0 C++ Builder
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  CloseHandle(hNetThread);
  if (hThread != NULL)
  {
    CloseHandle(hThread);
  }  
  WSACleanup();
}
После этого ошибка не вылазит но вылазит сообщение от
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
sClient = accept(sServerListen, (struct sockaddr *)&clientaddr,
                        &iSize);        
        if (sClient == INVALID_SOCKET)
        {
			MessageBox( 0 , "Accept filed", "Error",  0 );
            break;
        }

так и должно быть ?
...
Рейтинг: 0 / 0
01.10.2007, 08:48:45
    #34837454
Begem0t!k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при выходе WinSock2.0 C++ Builder
Просто никогда не пользовался потоками WinAPI может лучше взять VCL TThread
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка при выходе WinSock2.0 C++ Builder / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]