использую winsock на XP,2000,NT работает, на 98 нет :(
От: Аноним  
Дата: 29.10.03 20:16
Оценка:
Почему не работает на 98 программе моя программа, которая использует сокеты. Использую winsock

#pragma comment(lib, "wsock32.lib")
#include <winsock.h>


почему на XP,2000,NT работает, а на 98 нет? при чем не "ругается", не зависает, а тупо не может приконнетиться (( в опциях стоит static library...
Re: использую winsock на XP,2000,NT работает, на 98 нет :(
От: NeuroVirus Россия  
Дата: 30.10.03 08:05
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Почему не работает на 98 программе моя программа, которая использует сокеты. Использую winsock


А>
А>#pragma comment(lib, "wsock32.lib")
А>#include <winsock.h>
А>


А>почему на XP,2000,NT работает, а на 98 нет? при чем не "ругается", не зависает, а тупо не может приконнетиться (( в опциях стоит static library...


а код ошибки какой?
а WSAStartup с каским параметром?
Re: использую winsock на XP,2000,NT работает, на 98 нет :(
От: Vamp Россия  
Дата: 30.10.03 08:28
Оценка:
А>почему на XP,2000,NT работает, а на 98 нет? при чем не "ругается", не зависает, а тупо не может приконнетиться (( в опциях стоит static library...

Вызов, код ошибки, параметр WSAStratup(), результат ее же... Что ты как маленький...
Да здравствует мыло душистое и веревка пушистая.
Re[2]: использую winsock на XP,2000,NT работает, на 98 нет :
От: alexander7777  
Дата: 30.10.03 08:42
Оценка:
Здравствуйте, Vamp, Вы писали:


А>>почему на XP,2000,NT работает, а на 98 нет? при чем не "ругается", не зависает, а тупо не может приконнетиться (( в опциях стоит static library...


V>Вызов, код ошибки, параметр WSAStratup(), результат ее же... Что ты как маленький...


вот параметр,

class WinsockInit
    {
    public :
        WSADATA m_wsd;
        int m_iStatus;

        WinsockInit(WORD wVersionRequested = 0x0101);
        ~WinsockInit();
    };


ошибок нет, даже по сниферу видно что пакеты уходят пытаются подконнетиться...
но не коннектиться (((((
на 2000, XP, NT все на ура
Re[2]: использую winsock на XP,2000,NT работает, на 98 нет :
От: NeuroVirus Россия  
Дата: 30.10.03 08:44
Оценка:
Здравствуйте, Vamp, Вы писали:


А>>почему на XP,2000,NT работает, а на 98 нет? при чем не "ругается", не зависает, а тупо не может приконнетиться (( в опциях стоит static library...


V>Вызов, код ошибки, параметр WSAStratup(), результат ее же... Что ты как маленький...


кто тут маленький? кто русский язык не понимает?
я спросил 2 простых детских вопроса:
какие параметры в вызове WSAStartup()
и
что возвращает connect() и какой код ошибки возвращает WSAGetLastError

если и теперь неясно, то нефиг тут делать, особенно гордиться своими седыми волосами
PS пипл, простите, что-то разозлился на умников...
Re[3]: использую winsock на XP,2000,NT работает, на 98 нет :
От: NeuroVirus Россия  
Дата: 30.10.03 08:47
Оценка:
Здравствуйте, alexander7777, Вы писали:

A>Здравствуйте, Vamp, Вы писали:



А>>>почему на XP,2000,NT работает, а на 98 нет? при чем не "ругается", не зависает, а тупо не может приконнетиться (( в опциях стоит static library...


V>>Вызов, код ошибки, параметр WSAStratup(), результат ее же... Что ты как маленький...


A>вот параметр,


A>
A>class WinsockInit
A>    {
A>    public :
A>        WSADATA m_wsd;
A>        int m_iStatus;

A>        WinsockInit(WORD wVersionRequested = 0x0101);
A>        ~WinsockInit();
A>    };

A>


A>ошибок нет, даже по сниферу видно что пакеты уходят пытаются подконнетиться...

A>но не коннектиться (((((
A>на 2000, XP, NT все на ура


а я не понял, на каком хосте замена ОС — на сервере или клиенте? можно поподробнее?
Re[3]: использую winsock на XP,2000,NT работает, на 98 нет :
От: Vamp Россия  
Дата: 30.10.03 08:53
Оценка:
A>
A>class WinsockInit
A>    {
A>    public :
A>        WSADATA m_wsd;
A>        int m_iStatus;

A>        WinsockInit(WORD wVersionRequested = 0x0101);
A>        ~WinsockInit();
A>    };

A>


Потрясающий класс. Помогает ровно настолько, насколько код примерно такой:

"Вот код сервера, народ, помогите, что не работает?
StartMyCoolServer();

"
Да здравствует мыло душистое и веревка пушистая.
Re[3]: использую winsock на XP,2000,NT работает, на 98 нет :
От: Vamp Россия  
Дата: 30.10.03 08:55
Оценка:
Напоминаю, аптека за углом...
Да здравствует мыло душистое и веревка пушистая.
Re: использую winsock на XP,2000,NT работает, на 98 нет :(
От: sercher Украина  
Дата: 30.10.03 09:02
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Почему не работает на 98 программе моя программа, которая использует сокеты. Использую winsock


А>
А>#pragma comment(lib, "wsock32.lib")
А>#include <winsock.h>
А>


А>почему на XP,2000,NT работает, а на 98 нет? при чем не "ругается", не зависает, а тупо не может приконнетиться (( в опциях стоит static library...


Проблема в разных версиях библиотек сокетов под 2000(XP) и под 98. Апгрейдь сокеты на 98-й до второй версии, или до самой последней.
Re[2]: использую winsock на XP,2000,NT работает, на 98 нет :
От: Аноним  
Дата: 30.10.03 09:08
Оценка:
Здравствуйте, sercher, Вы писали:

S>Здравствуйте, Аноним, Вы писали:


А>>Почему не работает на 98 программе моя программа, которая использует сокеты. Использую winsock


А>>
А>>#pragma comment(lib, "wsock32.lib")
А>>#include <winsock.h>
А>>


А>>почему на XP,2000,NT работает, а на 98 нет? при чем не "ругается", не зависает, а тупо не может приконнетиться (( в опциях стоит static library...


S> Проблема в разных версиях библиотек сокетов под 2000(XP) и под 98. Апгрейдь сокеты на 98-й до второй версии, или до самой последней.


а если не хочется апгрейдить на 98 сокеты, как подключить либу или где ее взять? чтобы под 98 работало
Re[4]: использую winsock на XP,2000,NT работает, на 98 нет :
От: NeuroVirus Россия  
Дата: 30.10.03 09:12
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Напоминаю, аптека за углом...


а угол где?
Re[2]: использую winsock на XP,2000,NT работает, на 98 нет :
От: aik Австралия  
Дата: 30.10.03 09:53
Оценка:
Здравствуйте, sercher, Вы писали:

А>>почему на XP,2000,NT работает, а на 98 нет? при чем не "ругается", не зависает, а тупо не может приконнетиться (( в опциях стоит static library...


S> Проблема в разных версиях библиотек сокетов под 2000(XP) и под 98. Апгрейдь сокеты на 98-й до второй версии, или до самой последней.


не путай перца, стандартных сокетов 1.1 ему за глаза должно хватить. пусть лучше код шлет. тем более, что в 98-й они и так второй версии, ибо afaik ie4 без них не живет, а он в 98-й сразу есть.
Re[3]: использую winsock на XP,2000,NT работает, на 98 нет :
От: Аноним  
Дата: 30.10.03 12:19
Оценка:
Здравствуйте, aik, Вы писали:

aik>Здравствуйте, sercher, Вы писали:


А>>>почему на XP,2000,NT работает, а на 98 нет? при чем не "ругается", не зависает, а тупо не может приконнетиться (( в опциях стоит static library...


S>> Проблема в разных версиях библиотек сокетов под 2000(XP) и под 98. Апгрейдь сокеты на 98-й до второй версии, или до самой последней.


aik>не путай перца, стандартных сокетов 1.1 ему за глаза должно хватить. пусть лучше код шлет. тем более, что в 98-й они и так второй версии, ибо afaik ie4 без них не живет, а он в 98-й сразу есть.


Итак показываю бибилиотеку которую я использую, может глядя на нее вы скажете в чем моя проблема:


// socket.cpp

#include <stdafx.h>
#include <stdio.h>
#include "socket.h"

//////////////////////////////////////////////////////////////////////////

WinsockInit::WinsockInit(WORD wVersionRequested)
{
    m_iStatus = WSAStartup(wVersionRequested, &m_wsd);
}

WinsockInit::~WinsockInit()
{
    WSACleanup();
}

//////////////////////////////////////////////////////////////////////////

InetAddr::InetAddr(WORD wPort)
    {
    memset(this, 0, sizeof(sockaddr_in));
    sin_family = AF_INET;
    sin_addr.s_addr = htonl(INADDR_ANY);
    sin_port = htons((u_short)wPort);
    }

InetAddr::InetAddr(LPCTSTR lpszAddress, WORD wPort)
    {
    Resolve(lpszAddress, wPort);
    }

InetAddr& InetAddr::operator = (LPCTSTR lpszAddress)
    {
    Resolve(lpszAddress);
    return *this;
    }

void InetAddr::Resolve(LPCTSTR lpszAddress, WORD wPort)
    {
    memset(this, 0, sizeof(sockaddr_in));
    sin_family = AF_INET;
    sin_addr.s_addr = inet_addr((LPTSTR)lpszAddress);
    if( sin_addr.s_addr == INADDR_NONE && strcmp((LPTSTR)lpszAddress, "255.255.255.255")!=0 )
        {
        HOSTENT* lphost = gethostbyname((LPTSTR)lpszAddress);
        if( lphost )
            sin_addr.s_addr = ((IN_ADDR*)lphost->h_addr)->s_addr;
        else
            sin_addr.s_addr = INADDR_ANY;
        }
    sin_port = htons((u_short)wPort);
    }

//////////////////////////////////////////////////////////////////////////

Socket::Socket()
    : m_sock(INVALID_SOCKET), m_bOwnSocket(false)
    {
    }

Socket::Socket(const Socket& s)
    : m_sock(s.m_sock), m_bOwnSocket(false)
    {
    }

Socket::Socket(SOCKET s)
    : m_sock(s), m_bOwnSocket(false)
    {
    }

Socket::~Socket()
    {
    if( m_bOwnSocket && m_sock != INVALID_SOCKET )
        Close();
    }

bool Socket::Create()
    {
    _ASSERT(m_sock == INVALID_SOCKET);
    m_sock = socket(AF_INET, SOCK_STREAM, 0);
    return (m_bOwnSocket = (m_sock != INVALID_SOCKET));
    }

void Socket::Close()
    {
    _ASSERT(m_sock != INVALID_SOCKET);
    shutdown(m_sock, 2);
    closesocket(m_sock);
    m_sock = INVALID_SOCKET;
    }

bool Socket::Bind(const InetAddr& addr)
    {
    return bind(m_sock, (const sockaddr*)&addr, sizeof(sockaddr)) != SOCKET_ERROR;
    }

bool Socket::Connect(const InetAddr& addr)
    {
    return connect(m_sock, (const sockaddr*)&addr, sizeof(sockaddr)) != SOCKET_ERROR;
    }

bool Socket::Listen()
    {
    return listen(m_sock, 5) != SOCKET_ERROR;
    }

Socket Socket::Accept(InetAddr& addr)
    {
    int len = sizeof(sockaddr);
    return Socket(accept(m_sock, (sockaddr*)&addr, &len));
    }

int Socket::Send(const unsigned char* buf, int cbBuf)
    {
    return send(m_sock, (const char*)buf, cbBuf, 0);
    }

int Socket::Send(const char* fmt, ...)
    {
        va_list marker;
        va_start(marker, fmt);

        char szBuf[1024*4];
        vsprintf(szBuf, fmt, marker);

        va_end(marker);

        return Send((unsigned char*)szBuf, strlen(szBuf));
    }

int Socket::Receive(unsigned char* buf, int cbBuf)
    {
    int n = recv(m_sock, (char*)buf, cbBuf, 0);
    return n;
    }

bool Socket::SetOpt(int opt, const char* pBuf, int cbBuf)
    {
    return setsockopt(m_sock, SOL_SOCKET, opt, pBuf, cbBuf) != SOCKET_ERROR;
    }

bool Socket::GetOpt(int opt, char* pBuf, int& cbBuf)
    {
    return getsockopt(m_sock, SOL_SOCKET, opt, pBuf, &cbBuf) != SOCKET_ERROR;
    }
Re[4]: использую winsock на XP,2000,NT работает, на 98 нет :
От: sercher Украина  
Дата: 30.10.03 12:43
Оценка:
Если и этот простой код не работает, то проблема не в проге:


WSAStartup(...)

SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock == INVALID_SOCKET)
  {
     MessageBox(NULL, "Can't create socket!", "error", MB_OK);
     return;
  }
  sockaddr_in cliAddr, servAddr;

  cliAddr.sin_family = AF_INET;
  cliAddr.sin_port = 0;
  cliAddr.sin_addr.s_addr = htonl(INADDR_ANY);

  if(bind(sock, (struct sockaddr*)&cliAddr, sizeof(cliAddr)) == SOCKET_ERROR)
  {
     MessageBox(NULL, "Can't bind socket!", "error", MB_OK);
     closesocket(sock);
     return;
  }

   servAddr.sin_family = AF_INET;
   servAddr.sin_port = htons(myport);
   servAddr.sin_addr.s_addr = inet_addr("xx.xx.xx.xx");

   if(connect(sock, (const struct sockaddr*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR)
   {
     MessageBox(NULL, "Can't connect to server!", "error", MB_OK);
     closesocket(sock);
     return;
   }
Re[5]: использую winsock на XP,2000,NT работает, на 98 нет :
От: Аноним  
Дата: 30.10.03 14:00
Оценка:
Здравствуйте, sercher, Вы писали:


S>Если и этот простой код не работает, то проблема не в проге:

этот кусок кода работает на 98

S>
S>WSAStartup(...)

S>SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
S>if(sock == INVALID_SOCKET)
S>  {
S>     MessageBox(NULL, "Can't create socket!", "error", MB_OK);
S>     return;
S>  }
S>  sockaddr_in cliAddr, servAddr;

S>  cliAddr.sin_family = AF_INET;
S>  cliAddr.sin_port = 0;
S>  cliAddr.sin_addr.s_addr = htonl(INADDR_ANY);

S>  if(bind(sock, (struct sockaddr*)&cliAddr, sizeof(cliAddr)) == SOCKET_ERROR)
S>  {
S>     MessageBox(NULL, "Can't bind socket!", "error", MB_OK);
S>     closesocket(sock);
S>     return;
S>  }

S>   servAddr.sin_family = AF_INET;
S>   servAddr.sin_port = htons(myport);
S>   servAddr.sin_addr.s_addr = inet_addr("xx.xx.xx.xx");

S>   if(connect(sock, (const struct sockaddr*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR)
S>   {
S>     MessageBox(NULL, "Can't connect to server!", "error", MB_OK);
S>     closesocket(sock);
S>     return;
S>   }
S>
Re[6]: использую winsock на XP,2000,NT работает, на 98 нет :
От: Аноним  
Дата: 28.11.03 17:26
Оценка:
У меня тоже были проблемы с портом кода с NT на Win98. проапгрейдился до WinSock 2.0 и написал утилиту

#include <winsock2.h>
#include <windows.h>
#include <iostream>
#include <fstream>

using namespace std;
void main()
{
ofstream f("report.txt");
WORD wVersionRequested = MAKEWORD( 2, 2 );
WSAData wsa_data = {0};
int res = WSAStartup(wVersionRequested,&wsa_data);
if (res == 0)
{
cout << "WSAStartup: OK"<<endl;
f << "WSAStartup: OK"<<endl;
cout << "WS Implementation: " << wsa_data.szDescription << endl;
f << "WS Implementation: " << wsa_data.szDescription << endl;
cout << "WS status:" << wsa_data.szSystemStatus << endl;
f << "WS status:" << wsa_data.szSystemStatus << endl;
cout << "======================================================" << endl;
f << "======================================================" << endl;
}
//------------------------------------------------
WSAPROTOCOL_INFO wsa_info[8];
unsigned long len = sizeof(wsa_info);
res = WSAEnumProtocols(NULL,wsa_info,&len);
if(res>0)
{
cout << "WSAEnumProtocols: OK"<<endl;
for(int i=0; i<=res-1;i++)
{
cout<<"-----------------------------"<<endl;
f<<"-----------------------------"<<endl;
cout<<"Protocol#"<<i<<":"<<endl;
f<<"Protocol#"<<i<<":"<<endl;
cout<<"iVersion: "<<wsa_info[i].iVersion<<endl;
f<<"iVersion: "<<wsa_info[i].iVersion<<endl;
cout<<"iAddressFamily: "<<wsa_info[i].iAddressFamily<<endl;
f<<"iAddressFamily: "<<wsa_info[i].iAddressFamily<<endl;
cout<<"iSocketType: "<<wsa_info[i].iSocketType<<endl;
f<<"iSocketType: "<<wsa_info[i].iSocketType<<endl;
cout<<"iProtocol: "<<wsa_info[i].iProtocol<<endl;
f<<"iProtocol: "<<wsa_info[i].iProtocol<<endl;
cout<<"szProtocol: "<<wsa_info[i].szProtocol<<endl;
f<<"szProtocol: "<<wsa_info[i].szProtocol<<endl;
}
cout<<"-----------------------------"<<endl;
f<<"-----------------------------"<<endl;
}
else
cout << "WSAEnumProtocols returned "<< res << endl;
f << "WSAEnumProtocols returned "<< res << endl;
Sleep(4000);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.