Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    aiuto socket e cambio di parametri

    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; 
    }

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296

    Moderazione

    Il linguaggio va indicato anche nel titolo, come da Regolamento.

    Qui l'ho aggiunto io.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    grazie mille scusa in anticipo

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: aiuto socket e cambio di parametri

    Originariamente inviato da the wizard87
    rielaborarlo da un byte a due byte
    Cioè ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    in pratica il software che ho inviato decodifica comandi ad 1byte (o carattere). Quello che devo cercare di fare è di estendere la decodifica da 1byte a più byte (questo caso 2) in funzione del protocollo che devo prevedere:

    a) byte di sincronizzazione
    b) byte del tipo
    c) byte della lunghezza dei dati
    d) byte(s) dei dati (0...N)
    e) eventuale checksum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.