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
- char szRepMessage[80]; // komunikat zwrotny
- int iMessageLen;
- int ret;
- char szInBuffer[128]; // bufor na otrzymany komunikat
- int iBufferLen;
- int iPort, iAddrLen;
- SOCKET sListen, sClient; // gniazdo dla nasluchu oraz do klienta
- SOCKADDR_IN addr,remote_addr; // interfejs lokalny oraz polaczonego klienta
- // port na ktorym sie komunikujemy (0...65535)
- iPort = 1000;
- // zaladuj WinSock w wersji 2.2
- WSAStartup(MAKEWORD(2,2), &wsda);
- // stworzenie gniazda TCP
- sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
- // sprawdzenie bledu
- if(sListen == SOCKET_ERROR)
- {
- cout << "Blad przy inicjalizacji gniazda : " << WSAGetLastError() << endl;
- system("PAUSE");
- exit(1);
- }
- // laczenie gniazda z adresem/portem
- addr.sin_family = AF_INET;
- addr.sin_port = htons(iPort);
- addr.sin_addr.s_addr = htonl(INADDR_ANY);
- ret = bind(sListen, (struct sockaddr *) &addr, sizeof(addr));
- // sprawdzenie bledu
- if(ret == SOCKET_ERROR)
- {
- cout << "Blad przy wiazaniu gniazda : " << WSAGetLastError() << endl;
- system("PAUSE");
- exit(1);
- }
- // ustaw tryb nasluchu
- ret = listen(sListen, 10);
- // sprawdzenie bledu
- if(ret == SOCKET_ERROR)
- {
- cout << "Blad przy trybie nasluchu : " << WSAGetLastError() << endl;
- system("PAUSE");
- exit(1);
- }
- // oczekiwanie na polaczenie
- cout << "Oczekiwanie na polaczenie (nacisnij CTRL-C zeby przerwac)..." << endl;
- iAddrLen = sizeof(remote_addr);
- sClient = accept(sListen, (struct sockaddr *) &remote_addr, &iAddrLen);
- // sprawdzenie bledu
- if(sClient == SOCKET_ERROR)
- {
- cout << "Blad przy nawiazywaniu polaczenia : " << WSAGetLastError() << endl;
- system("PAUSE");
- exit(1);
- }
- cout << "Polaczono z hostem " << inet_ntoa(remote_addr.sin_addr) << endl;
- // odbior komunikatu
- cout << "Oczekiwanie na odpowiedz..." << endl;
- ret = recv(sClient, szInBuffer, sizeof(szInBuffer), 0);
- // sprawdzenie bledu
- if(ret == SOCKET_ERROR)
- {
- cout << "Blad przy odbiorze komunikatu " << WSAGetLastError() << endl;
- system("PAUSE");
- exit(1);
- }
- // wyswietlenie komunikatu od klienta
- iBufferLen = ret;
- szInBuffer[iBufferLen] = '\0';
- cout << "Otrzymano komunikat o tresci \"" << szInBuffer << "\"" << endl;
- // wczytanie i wyslanie komunikatu zwrotnego
- cout << "Wpisz komunikat zwrotny...";
- cin.getline(szRepMessage,80,'\n');
- iMessageLen = strlen(szRepMessage);
- ret = send(sClient, szRepMessage, iMessageLen, 0);
- // sprawdzenie bledu
- if(ret == SOCKET_ERROR)
- {
- cout << "Blad przy wysylaniu komunikatu zwrotnego : " << WSAGetLastError() << endl;
- system("PAUSE");
- exit(1);
- }
- // zamkniecie gniazda
- closesocket(sClient);
- // zamkniecie WinSock
- WSACleanup();
- system("PAUSE");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement