Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как коректно работать с CSocket?


Автор: Free-lancer 30.1.2004, 13:58
Господа, сюжет такой: по MSDN для работы с Socket по средствам MFC необходимо построить связку CSocket - CSocketFile - CArchive и затем по средствам CArchive принимать/передавать данные. Но когда я пишу
Код

CSocket socket;
socket.Create(0,1,NULL); //Все по умолчанию

Возникает ошибка 10093: Either the application has not called WSAStartup, or WSAStartup failed. Но WSAStartup уже более низкоуровневая функция!
Как вот, как же все таки самым удобным и корректным способом инициализировать Socket?

Автор: AntonSaburov 30.1.2004, 16:22
Цитата
Either the application has not called WSAStartup, or WSAStartup failed.

CSocket сам вызывает WSAStartup (без этого никак). Значит ее вызов закончился неудачно. А вот почему так - сложон сказать. Может dll для сокетов грохнули. Хотя это вряд ли. Или еще что. Сложно так сказать.

Т.е ты вызываешь все корректно. Разве что можно Create вызывать вообще без параметров - они тогда сами по умолчанию должны подставиться.

Автор: Step 30.1.2004, 16:27
AntonSaburov, а может в проекте вот этого не хватает AfxSocketInit()

Автор: AntonSaburov 30.1.2004, 16:31
Цитата
AntonSaburov, а может в проекте вот этого не хватает AfxSocketInit()

Я честно сознаюсь, с CSocket не работал. Все больше на обычных сокетах. Так что вполне может быть, что это замечание верное. Спасибо, Step.

Автор: Step 30.1.2004, 16:40
Free-lancer, попробуй вставить в инит инстанце вот это
Код
if (!AfxSocketInit())
{
 AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
 return FALSE;
}

Автор: Free-lancer 30.1.2004, 17:00
Огромное спасибо, Step. После вызова AfxSocketInit() все заработало. Только в таком виде код выдает ошибку! Я взял использование этой функции из MSDN:
Код
BOOL CMyApp::InitInstance()
{
 //Default Appwizard code.
 if(!AfxSocketInit())
   AfxMessageBox("Failed to Initialize Sockets",MB_OK| MB_ICONSTOP);
 return CWinApp::InitInstance();
}

Автор: Step 30.1.2004, 17:13
Free-lancer, этот код который ты привел, будет вставляться автоматически если ты пометишь чекбокс Windows sockets на закладке Advanced Features в аппликашион визарде

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)