|
Ошибка при выходе WinSock2.0 C++ Builder
#34837449
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
|
|
|
|
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 ...
|
|
|