det jeg har lavet indtil nu ser sådan ud:
problemet er bare at den kommer ind i if sætningen på server siden men det virker ikke som om jeg får noget på klient siden.
sådan her ser programmet ud der skal finde ud af om varen er på lager og sende et svar:
#include <iostream>
#include "server.h"
#include "klient.h"
void Klient::Products(char *navn)
{
Klient k;
int valg = 0;
FridgeItem Fridge[19] = {
{"Cheese", 8},
{"Soda", 1},
{"Milk", 4}
};
int fridgeNum = 3; //antal af varer
k.Send_Info(Fridge, fridgeNum, navn);
}
void Klient::Send_Info(FridgeItem items[], int num, char *navn)
{
for(int i=0; i<num; i++)
{
if(items[i].amount <=num)
{
items[i].name = navn;
nOk=send(fd, navn,100, 0);
std::cout<<"debug 1 "<<navn<<std::endl;
}
else
{
nOk=send(fd, "no product of that name", 100,0);
}
}
}
og programmet der laver forbindelsen til klienten:
#include <iostream>
#include <winsock2.h>
#include "server.h"
#include "klient.h"
void Server::StartServer(int port)
{
Klient k;
char name;
WSAStartup(0x0101, &wlib);
saddr.sin_family = AF_INET;
saddr.sin_port = htons(port); //port nummer
saddr.sin_addr.s_addr = INADDR_ANY;
clength = sizeof(saddr);
if((os = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) !=-1)
{
std::cout<<"Socket skabt"<<std::endl;
}
else
{
std::cout<<"Error kunne ikke skabe socket"<<std::endl;
Luk();
}
if((res= bind(os, (sockaddr *) &saddr, clength)) !=-1)
{
std::cout<<"Bind OK"<<std::endl;
}
else
{
std::cout<<"Fejl i Bind(): check Portnummeret"<<std::endl;
Luk();
}
if( (res = listen(os,5)) !=-1)
{
//BACKLOG
std::cout<<"Venter på Klienter"<<std::endl;
}
else
{
std::cout<<"Fejl i listen"<<std::endl;
Luk();
}
while(1)
{
ns = accept(os, (sockaddr *)&saddr, &clength);
while((len = recv(ns, txt, sizeof(txt), 0))!=0 )
{
std::cout<<"Anmodning modtaget om produktet: "<<txt<<std::endl;
k.Products(txt);
}
closesocket(ns);
}
Luk();
}
void Server::Luk()
{
closesocket(os);
WSACleanup();
}
de to var på server siden, de her er på klient siden:
den her laver forbindelsen til serveren
#include <iostream>
#include <winsock2.h>
using namespace std;
#include "klient.h"
Klient k;
void Klient::Connect(int port, char *adr)
{
WSAStartup(0x0101, &wlib);
fd = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
saddr.sin_family = AF_INET;
saddr.sin_port = htons(port);
saddr.sin_addr.s_addr = inet_addr(adr);
connect (fd, (sockaddr *) &saddr, sizeof(saddr));
}
void Klient::SendMsg(char *pmsg)
{
if( (nOk=send(fd, pmsg,100, 0)) == -1)
{
cout<<"Kunne ikke sende!"<<endl;
}
}
void Klient::CloseCon()
{
closesocket(fd);
WSACleanup();
}
void Klient::Rcv_message()
{
ns = accept(os, (sockaddr *)&saddr, &clength);
if((len = recv(ns, txt, sizeof(txt), 0))!=0 )
{
std::cout<<"Anmodning modtaget om produktet: "<<txt<<std::endl;
}
else
{
std::cout<<"noget er galt"<<std::endl;
}
closesocket(ns);
}
og det her er den brugeren bruger og som laver kaldet til at lave serveren:
#include <iostream>
using namespace std;
#include "klient.h"
#include "startklient.h"
int Klient::doconnect()
{
Klient k;
k.Connect(7777,"127.0.0.1");//port 10001 and 10002 seems to be of no use.
do
{
cout<<"Send query to the server:"<<endl;
cin>>msg;
k.SendMsg(msg);
Rcv_message();
cout<<"Press 'n' to disconnect from server"<<endl;
cout<<endl<<endl;
}
//while (stop != 'n');
while (strcmp(msg, "n"));
k.CloseCon();
}
Indlæg senest redigeret d. 10.05.2009 16:31 af Bruger #3353