Skocz do zawartości
Wu

Winsock 2.0 - Komunikacja Tcp/ip

Rekomendowane odpowiedzi

Nie wiem co jest nie tak ja powinno. :(

Problem w tym ze owszem udaje sie połączyć z serwerem, (jest połączenie w logach serwera, moge odebrac komunikat od serwera, ale nie wiem zupełnie jak mogę coś wysłać.

Funkcja zwraca mi ze wysłano 4 bajty ale nic nie ma w logach. Nie moge sptawdzić czy wysłano jakikolwie paokiet bo mam tylko modem i niestety większosc snifferów nie ma możliwości pzrechwytywania modemu (poza tym odwołuję sie do localhost (nawet nie wiem pzrez jaki interfejs to idzie ?!?)

 

 

nie jest to w sumie aplikacja a jedynie próba użycia winsock API, a kod wygląda tak: Co moze być powodem ze nie moge wysłac pakietu ?

 

 

 

int main(){WSADATA wsaData;int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );if ( iResult != NO_ERROR ) printf("Blad przy  WSAStartup()\n");SOCKET gniazdko;gniazdko = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );if ( gniazdko == INVALID_SOCKET ) {	printf( "Blad przy wyk. funkcji  socket(): %ld\n", WSAGetLastError() );	WSACleanup();	return 0;}sockaddr_in clientService;clientService.sin_family = AF_INET;clientService.sin_addr.s_addr = inet_addr( "127.0.0.1" );clientService.sin_port = htons( 25 );if ( connect( gniazdko, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) {    printf( "Failed to connect.\n" );    WSACleanup();    return 0;}int bytesSent;int bytesRecv = SOCKET_ERROR;char sendbuf[512] = "";char recvbuf[512] = "";bytesRecv = recv( gniazdko, recvbuf, 512, 0 );printf( "Odebrano bajtow: %ld\n", bytesRecv );cout << recvbuf;char kbwait;cin >> kbwait;strcpy( sendbuf,"HELO");bytesSent = send( gniazdko, sendbuf, 4, 0 );printf( "Wyslano bajtow: %ld\n", bytesSent );cin >> kbwait;return 0;}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ręki, głowy, czy też innych członków sobie nie dam uciąć, ale bodajże po wysłaniu wszytskiego musisz jakos "powiadomić" serwer, że skończyłeś wprowadzać dane i żeby zaczął je mielić. używa się do tego znaków CR LF, czyli powrotu karetki i przejscia do nastepnej linii(w c/c++: \r\n , delphi: #10 #13). Jeśli się mylę poprawcie ;)

 

[EDIT]

Chodzi mi o to oczywiscie:

strcpy( sendbuf,"HELO");

tylko w strcpy chyba nie mozna dac \r\n więc można spróbować np. sprintf();

sprintf(sendbuf, "HELO\r\n");
Edytowane przez Sid

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wu:

Żeby coś przesłać musisz mieć dwa gniazdka, jedno które wysyła, drugie które odbiera. A do zainicjowania połączenia jeszcze trzecie do nasłuchiwania. Ja widze u Ciebie tylko jedno.

 

Sid:

Dobrze że nie dałeś sobie nic uciąć bo głupoty napisałeś :wink:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wielkie dzięki SID! Miałęś rację. Sam sie dziwię ze nie zwróciłem na to uwagi! Wielkie dzięki po stokroć!

 

Megabyte: Tak sie składa że tym razem Ty napisałeś głupoty

 

Żeby coś przesłać musisz mieć dwa gniazdka, jedno które wysyła, drugie które odbiera. A do zainicjowania połączenia jeszcze trzecie do nasłuchiwania. Ja widze u Ciebie tylko jedno.

Pisze aplikację klienta SMTP wiec w zasadzie potzrebuję (w tym wypadku jedno gniazdko) drugie posiada serwer poczty postawiony na lokalnym komputerze (w celach testowych of course). Poza tym w przypadku TCP komunikacja jest dwukierunkowa :)

 

Do zainicjowania połączenia nie jest potzrebne 3 gniazdko do nasłuchu.. bo pisze klienta nie serwrer :D

Edytowane przez Wu

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wu:

:lol:

Rozwaliłeś mnie doszczętnie tym postem. Czy w pytaniu jest gdzieś info że używasz protokołu SMTP i że piszesz tylko aplikacje klienta. Zadajesz ogólnikowe pytanie, dostajesz ogólnikową odpowiedź.

 

Pisałeś kiedyś aplikacje serwera? Jest jedno gniazdo, które nasłuciach!e, w przypadku zainicjowania nowego połączenia tworzone jest nowe gniazdo, przez które odbywa się transmisja. To 3 służy tylko i wyłącznie do tworzenia nowych połączeń.

 

Tobie radze nauczyć się zadawać pytania a Sidowi gratuluje spostrzegawczości (ja dopiero po twoim drugim poście zwróciłem uwage na numer portu) i przede wszystkim domyślenia się o co Tobie chodziło.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tobie radze nauczyć się zadawać pytania a Sidowi gratuluje spostrzegawczości (ja dopiero po twoim drugim poście zwróciłem uwage na numer portu) i przede wszystkim domyślenia się o co Tobie chodziło.

1392704[/snapback]

Dzięki ;) Swoją drogą nie rozpoznałem że to SMTP po porcie ;) Tylko po pierwszej komendzie ("HELO") wysyłanej do serwera ;) ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...