Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <winsock.h>
- #include <iostream>
- #include <cstdlib>
- #include <cstring>
- using namespace std;
- int main(int argc, int **argv)
- {
- WSADATA wsda; // informacja zwrocona przez WSAStartup
- struct hostent *host; // informacja o serwerze
- char szMessage[80]; // komunikat
- int iMessageLen;
- int ret;
- char szInBuffer[128];
- int iBufferLen;
- char szAddress[64];
- int iPort;
- SOCKET s; // uzywane gniazdo
- SOCKADDR_IN addr; // adres hosta
- // pobranie adresu IP
- cout << "Podaj adres IP do ktorego wyslac (np. 127.0.0.1) ...";
- cin.getline(szAddress,64,'\n');
- // port na ktorym sie komunikujemy (0...65535)
- iPort = 1000;
- // zaladuj WinSock w wersji 2.2
- WSAStartup(MAKEWORD(2,2), &wsda);
- // stworzenie gniazda TCP
- s = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
- // sprawdzenie bledu
- if(s == SOCKET_ERROR)
- {
- cout << "Blad przy inicjalizacji gniazda : " << WSAGetLastError() << endl;
- system("PAUSE");
- exit(1);
- }
- // informacja o hoscie
- addr.sin_family = AF_INET;
- addr.sin_port = htons(iPort);
- addr.sin_addr.s_addr = inet_addr(szAddress);
- if(addr.sin_addr.s_addr == INADDR_NONE) // jesli nie podano numeru IP, to odnajdz go z DNS
- {
- host = NULL;
- cout << "Szukam hosta..." << endl;
- host = gethostbyname(szAddress); // pobierz numer IP i go zachowaj
- if(host == NULL)
- {
- cout << "Nieznany host." << endl;
- system("PAUSE");
- exit(1);
- }
- memcpy(&addr.sin_addr, host->h_addr_list[0], host->h_length);
- cout << "OK." << endl;
- }
- // laczenie z serwerem
- cout << "Laczenie z hostem " << szAddress << " na porcie " << iPort << endl;
- ret = connect(s, (struct sockaddr *) &addr, sizeof(addr));
- // sprawdzenie bledu
- if(ret == SOCKET_ERROR)
- {
- cout << "Blad przy laczeniu z serwerem : " << WSAGetLastError() << endl;
- system("PAUSE");
- exit(1);
- }
- //pczatek
- // pobranie komunikatu do bufora
- cout << "Wpisz komunikat ...";
- cin.getline(szMessage,80,'\n');
- // dlugosc komunikatu
- iMessageLen = strlen(szMessage);
- // wyslanie komunikatu
- cout << "Wysylanie pakietu..." << endl;
- ret = send(s, szMessage, iMessageLen, 0);
- // sprawdzenie bledu
- if(ret == SOCKET_ERROR)
- {
- cout << "Blad przy wysylaniu komunikatu : " << WSAGetLastError() << endl;
- system("PAUSE");
- exit(1);
- }
- // odbior komunikatu zwrotnego
- cout << "Oczekiwanie na komunikat zwrotny..." << endl;
- ret = recv(s, szInBuffer, sizeof(szInBuffer), 0);
- // sprawdzenie bledu
- if(ret == SOCKET_ERROR)
- {
- cout << "Blad przy odbiorze komunikatu zwrotnego : " << WSAGetLastError() << endl;
- system("PAUSE");
- exit(1);
- }
- // wyswietlenie komunikatu zwrotnego
- iBufferLen = ret;
- szInBuffer[iBufferLen] = '\0';
- cout << "Otrzymano komunikat o tresci \"" << szInBuffer << "\" od hosta " << szAddress << endl;
- //koniec petli
- // zamkniecie gniazda
- closesocket(s);
- // zamkniecie WinSock
- WSACleanup();
- system("PAUSE");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement