konto usunięte

Temat: Klient/serwer sockety c++

Witam,
Mógłby mnie ktoś oświecić i powiedzieć jak przerobić kod klienta i serwera, tak aby z klienta wysyłać polecenia, a serwer by je wykonywał i zwracał wynik?

Kod serwera:
#include <cstdio>
#include <cstdlib>
#include <WinSock2.h>

int main()
{
WSADATA wsaData;
int result = WSAStartup(MAKEWORD(2, 2), &wsaData);

if (result != NOERROR)
{
printf("Błąd inicjalizacji");
}

SOCKET gniazdo = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if (gniazdo == INVALID_SOCKET)
{
printf("Błąd podczas tworzenia gniazda");
WSACleanup();
return 1;
}

sockaddr_in service;
memset(&service, 0, sizeof(service));
service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr("127.0.0.1");
service.sin_port = htons(25013);

if (bind(gniazdo, (SOCKADDR *)&service, sizeof(service)) == SOCKET_ERROR)
{
printf("bind() failed.\n");
closesocket(gniazdo);
return 1;
}

if (listen(gniazdo, 1) == SOCKET_ERROR)
{
printf("Error listening on socket.\n");
}

SOCKET acceptSocket = SOCKET_ERROR;
printf("Waiting for a client to connect...\n");

while (acceptSocket == SOCKET_ERROR)
{
acceptSocket = accept(gniazdo, NULL, NULL);
}

printf("Client connected");
gniazdo = acceptSocket;

long int bytesRecv = SOCKET_ERROR;
char recvbuf[32] = "";

bytesRecv = recv(gniazdo, recvbuf, 32, 0);
printf("Bytes received: %ld\n", bytesRecv);
printf("Received text: %s\n", recvbuf);

system("pause");
}


Kod klienta

#include <cstdio>
#include <cstdlib>
#include <WinSock2.h>

int main()
{
WSADATA wsaData;
int result = WSAStartup(MAKEWORD(2, 2), &wsaData);

if (result != NOERROR)
{
printf("Błąd inicjalizacji");
}

SOCKET gniazdo = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if (gniazdo == INVALID_SOCKET)
{
printf("Błąd podczas tworzenia gniazda");
WSACleanup();
return 1;
}

sockaddr_in service;
memset(&service, 0, sizeof(service));
service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr("127.0.0.1");
service.sin_port = htons(25013);

if (connect(gniazdo, (SOCKADDR *)& service, sizeof(service)) == SOCKET_ERROR)
{
printf("Failed to connect.\n");
WSACleanup();
return 1;
}

long int bytesSent;
int bytesRecv = SOCKET_ERROR;

char recvbuf[32] = "";
char sendbuf[32] = "polecenie";
bytesSent = send(gniazdo, sendbuf, strlen(sendbuf), 0);
printf("Bytes sent: %ld\n", bytesSent);
while (bytesRecv == SOCKET_ERROR)
{
long int bytesRecv = recv(gniazdo, recvbuf, 32, 0);

if (bytesRecv == 0 || bytesRecv == WSAECONNRESET)
{
printf("Connection closed.\n");
break;
}

if (bytesRecv < 0)
return 1;

printf("Bytes received: %ld\n", bytesRecv);
printf("Received text: %s\n", recvbuf);
}
system("pause");
}

Ten post został edytowany przez Autora dnia 30.07.14 o godzinie 19:43
Tomasz Kaczanowski

Tomasz Kaczanowski Ot, programista

Temat: Klient/serwer sockety c++

Paweł C.:
Witam,
Mógłby mnie ktoś oświecić i powiedzieć jak przerobić kod klienta i serwera, tak aby z klienta wysyłać polecenia, a serwer by je wykonywał i zwracał wynik?

zaprzyjaźnić się dodatkowo z funkcją select, która oczekuje na komunikaty. Przy serwerze, zależy co ma robić, bo może jeszcze potrzeba by się zaprzyjaźnić z wątkami.

Następna dyskusja:

C++ i SQL serwer




Wyślij zaproszenie do