Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» socket не компилируется :(

Автор: Chessmaster3000
Дата сообщения: 16.02.2007 22:35
Пытаюсь вот научиться писать сетевое приложение клиент (компилятор Dev-C++).
Вот на что ругается компилятор :


=================================
#include <stdio.h>
#include<winsock2.h>
int main()
{
int a;
a= socket(AF_INET,SOCK_STREAM,0);


system("PAUSE");    
return 0;
}
==================================

undefined reference to socket@12

Что я не так делаю?
Спасибо.
Автор: Abs62
Дата сообщения: 16.02.2007 22:58

Цитата:
Что я не так делаю?

Забыл добавить Ws2_32.lib в опциях проекта (Project options -> Parameters -> Add Library or Object).
Автор: Chessmaster3000
Дата сообщения: 16.02.2007 23:30
Файла Ws2_32.lib у меня не нашлось ,но нашёлся файл с очень похожим именем libws2_32.a ,который я добавил по указанному пути. Теперь ошибку компилятор не выдаёт.
Спасибо!

Добавлено:
Продолжаю создавать сетевое приложение.
У меня два компилятора-один Борланд 5.5 а второй Dev-C++.
Этот код после компиляции в Dev-C++ выдаёт номер полученного сокета(что и требуется),а после компиляции в Борланде
сокет системой не выдаётся,код ошибки 10106. В MCDN http://msdn2.microsoft.com/en-us/library/ms740668.aspx сказано, что это значит, что функции WSPStartup или NSPStartup подвели. Что делать?


=================================
#include<stdio.h>
#include<winsock2.h>
main()
{
WORD wVersionRequested;
WSADATA wsaData;
int k,a,err;


wVersionRequested = MAKEWORD( 2, 2 );
k=WSAStartup( wVersionRequested, &wsaData ); /*перед использованием сокета необходимо запустить WSAStartup*/


printf("WSAStartup=%d\n",k); /*если 0 то на этом этапе ошибки нет*/

a=socket(AF_INET,SOCK_STREAM,0); /* получаем сокет или INVALID_SOCKET в случае ощибки (=-1) */

printf("The socket function has returned %d\n",a); /*посмотрим что получили*/

a=WSAGetLastError();
printf("%d\n",a);
system("PAUSE");
return 0;
}
====================================
Автор: Dem_anywhere
Дата сообщения: 17.02.2007 14:00
Откомпилил твоё под BC5.5 - работает

WSAStartup=0
The socket function has returned 1936
0


так что не в компилере дело....
Автор: Abs62
Дата сообщения: 17.02.2007 14:58
Chessmaster3000

Цитата:
Что делать?

В MSDN написано: "There must be a call to WSACleanup for every successful call to WSAStartup made by a task. Only the final WSACleanup for that task does the actual cleanup; the preceding calls simply decrement an internal reference count in the WS2_32.DLL" (выделено мной).
Не уверен, что дело в этом, но захваченные ресурсы всё-таки лучше освобождать перед завершением программы, особенно когда речь идёт об "internal reference count".
Автор: Mickey_from_nsk
Дата сообщения: 19.02.2007 10:34
Chessmaster3000
Фигасе, ты какую версию сокетов хочешь загрузить то?
2.2 еще нету! есть только 2.0, или на крайняк 1.1.
Надо вместо
Цитата:
MAKEWORD( 2, 2 );
делать MAKEWORD(1,1) или (2,0)
Автор: Abs62
Дата сообщения: 19.02.2007 17:32
Mickey_from_nsk
Это пример из MSDN трёхлетней давности. В нём запрашивается именно версия 2.2.
Автор: Mickey_from_nsk
Дата сообщения: 20.02.2007 11:35
Abs62
Хм... Понял шутку юмора...
А в новых мсдн-ах она пофиксена?
Автор: Chessmaster3000
Дата сообщения: 20.02.2007 19:55
Mickey_from_nsk.
Я сделал простое клиет-серверное (работающее) приложение используя значение 2.2 . Почему ты считаешь что есть только 2.0?
http://msdn2.microsoft.com/en-us/library/ms885820.aspx
Автор: Mickey_from_nsk
Дата сообщения: 21.02.2007 07:03
Залез, посмотрел в MSDN. В 2003 действительно в примере запрашивается версия 2.2, хотя в статье ничего про эту версию не сказано. Там разговор идет только про 2.0.
В 2005 описывается исключительно 2.2.
Вывод для меня такой. Видимо, во Framework 2.0 (или во что-то сопутствующее ему) включена версия 2.2, но родной для XP (да и наверно для 2000) есть 2.0.
Возможно что сервис-паки поднимают эту версию до 2.2, но не факт.

Страницы: 1

Предыдущая тема: медиаплеер на c#


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.