Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

winsock -problem

Ostatnio zmodyfikowano 2010-11-10 16:11
Autor Wiadomość
Ernest171
Temat założony przez niniejszego użytkownika
winsock
» 2010-11-08 19:37:09
Po dodaniu nagłówka #include <winsock.h> mam błąd  :
cannot convert `int*' to `const char*' for argument `4' to `int setsockopt(SOCKET, int, int, const char*, int)'


Jak to naprawić?
P-23713
SeaMonster131
» 2010-11-08 19:39:00
To może najpierw zerknij do podstaw C++ i poczytaj sobie o zmiennych :)
(Dobra, napisze, mamy sobie pomagać: nie możesz użyć int* w 4 argumencie tej funkcji ponieważ jest tam const char*). pozdro :)
P-23714
Ernest171
Temat założony przez niniejszego użytkownika
winsock
» 2010-11-08 19:48:27
Dobra skompilowałem ale.. jak włączam serwer to wyskakuje Socket: No Error   i się wyłącza.
P-23715
malan
» 2010-11-08 20:02:16
Pokaż linijkę kodu, w której masz wywołanie setsockopt.
P-23716
Ernest171
Temat założony przez niniejszego użytkownika
winsock
» 2010-11-08 20:06:38
   if(setsockopt( listener, SOL_SOCKET, SO_REUSEADDR, (const char*)&yes, sizeof( int ) ) == - 1 ) {
       perror( "setsockopt" );
       exit(1);
   }
P-23717
malan
» 2010-11-08 20:17:54
Tu jest ok.
Z treści błędu wynika, że błąd występuje tu:
C/C++
// utwórz gniazdo nasłuchująceo
if(( listener = socket( AF_INET, SOCK_STREAM, 0 ) ) == - 1 ) {
    perror( "socket" );
    exit( 1 );
}
Dziwi mnie tylko, że zwrócił No Error...

BTW: radzę Ci czytać, co ludzie Ci doradzają, bo to się czasem przydaje :). W wprowadzeniu masz wyraźnie napisane:
Czekaj! Musisz również zrobić wywołanie do funkcji WSAStartup() zanim cokolwiek będziesz chciał zrobić przy użyciu biblioteki gniazd. Kod do tego celu wygląda mniej więcej tak:
C/C++
#include <winsock.h>

{
    WSADATA wsaData; // jeśli to nie zadziała
    //WSAData wsaData; // użyj tego
   
    if( WSAStartup( MAKEWORD( 1, 1 ), & wsaData ) != 0 ) {
        fprintf( stderr, "WSAStartup failed.\n" );
        exit( 1 );
    }
P-23718
Ernest171
Temat założony przez niniejszego użytkownika
» 2010-11-08 21:31:33
Dzięki. Mam jeszcze jeden problem.. Jak zmodyfikować klient aby móc komunikować się z serwerem bo jak na razie po połączeniu nie mogę nic zrobić

Klient:
C/C++
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream>

#pragma comment(lib, "ws2_32.lib")

#define DEFAULT_PORT        5150
#define DEFAULT_BUFFER      64

using namespace std;

// Wątek główny. Inicjacja interfejsu Winsock,
// tworzenie gniazda, połączenie
// z serwerem, a następnie wysyłanie i odbieranie danych.
int main( int argc, char ** argv )
{
    cout << "Nacisnij ESC aby zerwac polaczenie" << endl;
    cout << "" << endl;
   
    WSADATA wsd;
    SOCKET sClient;
    sockaddr_in server;
    hostent * host = NULL;
    char szServer[ 128 ];
    int iPort = DEFAULT_PORT;
   
    cout << "Podaj IP: ";
    cin >> szServer;
   
    // Load winsock
    if( WSAStartup( MAKEWORD( 2, 2 ), & wsd ) != 0 )
    {
        cout << "Nie mozna stworzyc WinSock'a." << endl;
        return 1;
    }
   
    // Create socket and try to connect with server
    sClient = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
    if( sClient == INVALID_SOCKET )
    {
        cout << "Nie mozna utworzyc gniazda (" << WSAGetLastError() << ")." << endl;
        return 1;
    }
   
    server.sin_family = AF_INET;
    server.sin_port = htons(( u_short ) iPort );
    server.sin_addr.s_addr = inet_addr( szServer );
   
    // if server adress is no ip, but name, find ip
    if( server.sin_addr.s_addr == INADDR_NONE )
    {
        host = gethostbyname( szServer );
        if( host == NULL )
        {
            cout << "Nie mozna przeksztalcic na ip: " << szServer << endl;
            return 1;
        }
        CopyMemory( & server.sin_addr, host->h_addr_list[ 0 ], host->h_length );
    }
   
    if( connect( sClient,( sockaddr * ) & server,
    sizeof( server ) ) == SOCKET_ERROR )
    {
        cout << "Nie mozna sie polaczyc (" << WSAGetLastError() << ")." << endl;
        return 1;
    }
   
    cout << "Polaczono." << endl;
   
   
    while(( int ) getch() != 27 ) {
        char sendText[ 128 ];
        cout << "Wyslij: ";
        cin >> sendText;
       
        char buffer[ DEFAULT_BUFFER ];
        recv( sClient, buffer, DEFAULT_BUFFER, 0 );
        cout << "Odebrano: " << buffer << endl;
       
        strcpy( buffer, sendText );
        send( sClient, buffer, strlen( buffer ) + 1, 0 );
        cout << "Wyslano: " << buffer << endl;
    }
   
    cout << "Rozlaczam." << endl;
   
    closesocket( sClient );
    WSACleanup();
   
    return 0;
}
P-23721
DejaVu
» 2010-11-08 21:41:18
Dostałeś kurs, który opisuje krok po kroku jak się tworzy aplikacje klienta i serwera. Mamy za Ciebie napisać Twój program? :) Ja się uczyłem z tego kursu, który Ci podesłałem, poświęciłem X godzin aby go wprowadzić w czytelnej formie, dałem Ci z czego warto się uczyć, a Ty nawet nie pofatygujesz się przeczytać kursu w którym znajdują się odpowiedzi na Twoje pytania. Lepszej pomocy nie da się udzielić, chyba że liczysz na gotowca - bo do tego to zaczyna się sprowadzać...
P-23722
1 2 « 3 » 4
Poprzednia strona Strona 3 z 4 Następna strona