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ć? |
|
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 :) |
|
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. |
|
malan |
» 2010-11-08 20:02:16 Pokaż linijkę kodu, w której masz wywołanie setsockopt. |
|
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); } |
|
malan |
» 2010-11-08 20:17:54 Tu jest ok. Z treści błędu wynika, że błąd występuje tu: 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:
#include <winsock.h>
{ WSADATA wsaData; if( WSAStartup( MAKEWORD( 1, 1 ), & wsaData ) != 0 ) { fprintf( stderr, "WSAStartup failed.\n" ); exit( 1 ); }
|
|
|
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:
#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;
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; if( WSAStartup( MAKEWORD( 2, 2 ), & wsd ) != 0 ) { cout << "Nie mozna stworzyc WinSock'a." << endl; return 1; } 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.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; }
|
|
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ć... |
|
1 2 « 3 » 4 |