Задание такое: Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP.
Функционирование клиента и сервера реализовать следующим образом:
клиент посылает серверу два числа и получает назад НОД (наибольший общий делитель) этих чисел.
С клиентской частью проблем нет:
#include <winsock2.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#pragma comment (lib,"ws2_32.lib")
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested=MAKEWORD(2,2);
WSAStartup(wVersionRequested,&wsaData);
struct sockaddr_in peer;
peer.sin_family=AF_INET;
peer.sin_port=htons(1280);
peer.sin_addr.s_addr=inet_addr("127.0.0.1");
SOCKET s=socket(AF_INET,SOCK_STREAM,0);
connect(s,(struct sockaddr*) &peer,sizeof(peer));
char buf[255], b[255];
cout << "Введите, пожалуйста, два целых числа." << endl;
cin.getline(buf, 100, '\n');
send(s, buf, sizeof(buf), 0);
if (recv(s, b, sizeof(b), 0) != 0) {
b[strlen(b)] = '\0';
cout << b << endl;
cin.get();
}
closesocket(s);
WSACleanup();
getch();
return 0;
}
А вот с серверной, не знаю, как правильно найти НОД в данном случае:
#include <winsock2.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#pragma comment (lib,"ws2_32.lib")
using namespace std;
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested=MAKEWORD(2,2);
WSAStartup(wVersionRequested,&wsaData);
SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in local;
local.sin_family=AF_INET;
local.sin_port=htons(1280);
local.sin_addr.s_addr=htonl(INADDR_ANY);
int c=bind(s,(struct sockaddr*)&local,sizeof(local));
int r=listen(s,5);
cout<<"Server\n"<<endl;
while (true) //
{
char buf[255],res[100],b[255],*Res,letter[255];
string Str[10];
sockaddr_in remote_addr;
int size=sizeof(remote_addr);
SOCKET s2=accept(s,(struct sockaddr*)&remote_addr,&size);
while (recv(s2, b, sizeof(b), 0) != 0) { //начинается часть кода с поиском НОДа
int x = 0;
int y = 0;
while (x && y)
if (x >= y)
x %= y;
else
y %= x;
return x | y;
itoa(x / y, res, 10);
Res=new char[strlen(res)+1];
strcpy(Res,res);
Res[strlen(res)]='\0';
send(s2, res, sizeof(res)-2, 0);
}
closesocket(s2);
}
WSACleanup();
getchar();
}
На консоли ввожу числа, а дальше появляется: "ММММММММ..М *введённые числа*"