salve a tutti mi servirebbe un aiuto per la programmazione di un programmino che mi è stato dato per un progetto di informatica.
il programmino è per una connessione socket in cui lanciandolo aspetta fino a che non riceve un pacchetto di dati.
questo pacchetto è settato a un byte.
ora per il mio progetto dovrei rielaborarlo da un byte a due byte che mi servono.
posso semplicemente sostituire i valori del programma o devo cambiare altro??
grazie mille per l'aiuto
codice:
// Exampole.cpp : Defines the entry point for the console application.
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <map>
#include <utility> // make_pair
#include <string>
#include <winsock2.h>
#include <string.h>
using namespace std;
#define FLASH
#define WAIT 0
#define GO 1
#define STOP 2
#define QUIT 3
#define DISCONNECT 4
#define CONNECT 5
int count = 0;
int state = WAIT;
char buf[128];
DWORD WINAPI ThreadProc(LPVOID lpParameter){
SOCKET* client;
int n;
client = (SOCKET *)lpParameter;
while(1){
n = recv(*client,buf,1,0);
if(n <= 0){
state = QUIT;
return 1;
}
switch(buf[0]){
case 'I':
state = GO;
break;
case 'S' :
state = STOP;
break;
case 'Q' :
state = QUIT;
break;
case 'D' :
state = DISCONNECT;
break;
case 'C' :
state = CONNECT;
break;
default:
break;
}
printf("State is: %d",state);
}
return 1;
}
int main(int argc, char* argv[])
{
/*
GESTIONE SOCKET
*/
WSADATA data_ws; // inizializzo la variabile che contiene le primitive di Winsock
WORD p;
int lun;
SOCKET sock, sock_client;
struct sockaddr_in sock_addr, sock_addr_client;
int n;
HANDLE h;
int err=0; // inizializzo una variabile per gestire gli errori
unsigned char ip[4];
ip[0] = 127;
ip[1] = 0;
ip[2] = 0;
ip[3] = 1;
DWORD id1;
p=MAKEWORD(2,0); // creo la variabile p che contiene la versione della wsock32.dll
err=WSAStartup(p,&data_ws); // inizializzo la wsock32.dll verificandone la mancanza di errori
sock=socket(PF_INET,SOCK_STREAM,0);
sock_addr.sin_family=PF_INET; // indico il protocollo utilizzato (TCP/IP)
sock_addr.sin_port=htons(63000); //indico la porta a cui connettere il socket
sock_addr.sin_addr.S_un.S_un_b.s_b1=ip[0]; // indico l'indirizzo IP
sock_addr.sin_addr.S_un.S_un_b.s_b2=ip[1];
sock_addr.sin_addr.S_un.S_un_b.s_b3=ip[2];
sock_addr.sin_addr.S_un.S_un_b.s_b4=ip[3];
err=bind(sock,(struct sockaddr*)&sock_addr,sizeof(struct sockaddr));
err=listen(sock,1);
lun = sizeof(struct sockaddr_in);
//rimango in attesa della connessione da parte di un process...
sock_client = accept(sock,(struct sockaddr*)&sock_addr_client,&lun);
//avvio il processo di lettura
if( (h=CreateThread(NULL,0,ThreadProc,&sock_client,0,&id1)) == NULL )
return FALSE;
//avvio il processo di inventory...
printf("Connession Accettata\n");
while(state!=QUIT){
if(state == CONNECT){
printf("Connected..\n");
}
if(state == GO)
{
printf("State GO\n");
Sleep(1000);
}
if(state == STOP){
state = WAIT;
}
if(state == WAIT){
printf("State Wait\n");
Sleep(100);
}
if(state == DISCONNECT){
state = WAIT;
buf[0] = 'O';
buf[1] = 'K';
send(sock_client,buf,2,0);
}
}
WaitForSingleObject(h,50);
closesocket(sock_client);
closesocket(sock);
Sleep(100);
printf("Termine Programma\n");
WSACleanup();
return 0;
}