Buona sera ragazzi!
Sto provando a creare un prgramma client/server ma non riesco a farlo funzionare!
Allora, io vorrei:
codice:
Server attende il client;
Client si connette;
Server gli da il benvenuto ;
Client risponde;
do{
Server è pronto a ricevere comandi;
Client da un comando;
Server conferma l'arrivo dei messaggi;
Server lo elabora;
}while(messaggio == "exit")
Io uso un protocollo TCP/IP sulla porta 1111 ma il server restituisce messaggi strani. Al primo mex aggiunge caratteri strani, al secondo altri caratteri indecifrabili e alla terza volta non risponde più!
Server:
codice:
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
SOCKET ServerSocket,ClientSocket;
bool isClientConnected = false;
bool isServerListener = true;
WSADATA wsaInfo;
WSAStartup(MAKEWORD(2,2), &wsaInfo);
ServerSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
//if(ServerSocket == INVALID_SOCKET) throw Error;
SOCKADDR_IN Address;
Address.sin_family = PF_INET;
Address.sin_port = htons(1111);
Address.sin_addr.s_addr = INADDR_ANY;
bind(ServerSocket,(LPSOCKADDR)&Address, sizeof(Address));
listen(ServerSocket, 1);
for(;;)
{
ClientSocket = accept(ServerSocket, NULL, NULL);
isClientConnected = true;
string command;
Sleep(5);
command = Receive(ClientSocket);
cout << "Executing command...";
Send(ClientSocket,(char*)command.c_str());
}
Send(ClientSocket,"Closing Server...");
WSACleanup();
return 0;
}
int Send(SOCKET s, char *text)
{
return send(s, text,lstrlen(text),0);
}
char* Receive(SOCKET s)
{
char* buffer;
recv(s,buffer,sizeof(buffer),0);
return buffer;
}
client:
codice:
int main(int argn,char **argv)
{
SOCKET sock;
struct sockaddr_in sock_addr;
WSADATA data;
char command[1024];
char response[1024];
char mex[1024];
if(WSAStartup(MAKEWORD(2,0),&data) != 0)
{
closesocket(sock);
WSACleanup();
return 0;
}
sock=socket(PF_INET,SOCK_STREAM,0);
sock_addr.sin_family=PF_INET;
sock_addr.sin_port=htons(1111);
sock_addr.sin_addr.S_un.S_un_b.s_b1=127;
sock_addr.sin_addr.S_un.S_un_b.s_b2=0;
sock_addr.sin_addr.S_un.S_un_b.s_b3=0;
sock_addr.sin_addr.S_un.S_un_b.s_b4=1;
if(connect(sock,(struct sockaddr*)&sock_addr,sizeof(struct sockaddr)) != 0)
{
closesocket(sock);
WSACleanup();
return 0;
}
for (;;)
{
cout << "command: ";
cin >> command;
Send(sock,command);
cout << Receive(sock);
}
closesocket(sock);
WSACleanup();
return 0;
}
char* Receive(SOCKET s)
{
char* buffer;
recv(s,buffer,sizeof(buffer),0);
return buffer;
}
int Send(SOCKET s, char *text)
{
return send(s, text,lstrlen(text),0);
}
Vi prego corregete questa roba che ci sto sopra da un giorno!
<OT>
Domanda stupida: ma al server c++ potrei dialogare con un server in c# vero?
</OT>
aiutatemi ragazzi! I'm in your hands...