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
Ten post został edytowany przez Autora dnia 30.07.14 o godzinie 19:43
#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");
}