コード例 #1
0
ファイル: client.c プロジェクト: razarauf/socketFileExchange
int main(int argc, char *argv[])
{
  struct sockaddr_in bba; /* socket information */
  struct hostent *hp;     /* host information */
  int slen;               /* host computer */
  int s;                  /* length socket address */
  int rfd;
  char ch[MAXLINE];       /* character for i/o */
  int num_char=MAXLINE;   /* number of characters */
  int port;               /* port to connect to */

  char portnum[20];
  char hostname[20];
  char *filename = (char *) malloc(sizeof(char)*128);
  //char * arg1;
  //char * arg2;
  printf("\n hostname: ");
  scanf("%s", hostname);

  printf("\n port number: ");
  scanf("%s", portnum);
      
  getchar();
  
    /* Clear the data structure (saddr) to 0's. */
  memset(&bba,0,sizeof(bba));

  /* Tell our socket to be of the internet family (AF_INET). */
  bba.sin_family = AF_INET;

  /* Acquire the ip address of the server */
  hp=gethostbyname(hostname);

  /* Acquire the port #. */
  port=atoi(portnum);

  /* Copy the server's address to the socket address data structure. */
  memcpy(&bba.sin_addr, hp->h_addr, hp->h_length);

  /* Convert the integer Port Number to the network-short standard
   * required for networking stuff. This accounts for byte order differences.*/
  bba.sin_port=htons(port);
  
  for (;;)
  {
    /* Now that we have our data structure full of useful information,
   * open up the socket the way we want to use it.
   */
  s = socket(AF_INET, SOCK_STREAM, 0);
  if(s == -1)
    OOPS("socket");
  if(connect(s,(struct sockaddr *)&bba,sizeof(bba)) != 0)
    OOPS("connect");
    
    printf("\n>");
    //filename = (char *) malloc(sizeof(char)*128);
    
    char *tempPtr = fgets(filename, 200, stdin);
    
    if(strcmp(filename, "exit\n")==0){
      return 0;
    }
    printf("\ncommand entered: %s", filename);
    
    //getchar();
  
    if (tempPtr != NULL)
    {
        int last_char = strlen (filename) - 1;
        
        if (tempPtr[last_char] == '\n')
            tempPtr[last_char] = '\0';
    }
    
    char * tmpPtr;
    char * arg1;
    char * arg2;
    
    tmpPtr = strtok (filename," ");
    arg1 = tmpPtr;
    printf("arg1 entered: %s\n", arg1);
    
    if (strcmp(arg1, "listdir")==0)
    {
      write(s, "listdir", strlen("listdir"));
      
      int bbf = open("tempFile", O_WRONLY|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR);
          
      if (bbf < 0)
      {
        printf("error listdir opening");
        return 1;
      }
      //getting data of file
      while((num_char=recv(s,ch,MAXLINE,0)) > 0)
      {
        if (write(bbf,ch,num_char) < num_char)
           OOPS("writing");
      }
      close(bbf);
    }
    else
    {
        tmpPtr = strtok (NULL," ");
        arg2 = tmpPtr;
        printf("arg2 entered: %s\n", arg2);
        
        if(strcmp(arg1, "getfile")==0)
        {
          write(s, arg1, strlen(arg1));
          write(s, arg2, strlen(arg2));
        
          printf("arg2 is: %s\n", arg2);
          
          //if(read(s,arg2,20)<1)
          //{
          //  printf("error reading arg2\n");
          //  return 1;
          //}
          printf("arg2 read: %s\n", arg2);
          
          int bbf = open(arg2, O_WRONLY|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR);
          
          if (bbf < 0)
          {
            printf("error getfile opening");
            return 1;
          }
          //getting data of file
          while((num_char=recv(s,ch,MAXLINE,0)) > 0)
          {
            if (write(bbf,ch,num_char) < num_char)
               OOPS("writing");
          }
          close(bbf);
        }
        else if(strcmp(arg1, "putfile")==0)
        {
          
          struct stat fileStat;
          if(stat(arg2,&fileStat) < 0)
          {
            printf("Error - Filestat\n");
            return 1;
          }
          
          write(s, arg1, strlen(arg1));
          write(s, arg2, strlen(arg2));
          
          char *data = (char *) malloc(fileStat.st_size);     
          int filedesc = open(arg2, O_RDONLY);
          if (filedesc == -1){return 1;}
          if(read(filedesc, data, fileStat.st_size) < 0)
              printf("error reading file\n");
          if(close(filedesc) < 0)
          {
              printf("file close error\n");
              return 1;
          } 
          int bytes_sent;
          if((bytes_sent=send(s, data, fileStat.st_size, 0))!= fileStat.st_size)
          {
            printf("Error - filesend\n");
            return 1;
          }else
          {
            printf("bytes sent: %d & file size: %d\n", bytes_sent, fileStat.st_size);
          }
          printf("No error sending file?\n");
        }
        else if(strcmp(arg1, "rmvfile")==0)
        {
          write(s, arg1, strlen(arg1));
          write(s, arg2, strlen(arg2));
          printf("%s ", arg2);
          //while((num_char=recv(s,ch,MAXLINE,0)) > 0)
          //{
          //  if (write(1,ch,num_char) < num_char)
          //     OOPS("writing");
          //}
          //printf("rm\n");
        }
        else if(strcmp(arg1, "exit")==0)
        {
          printf("exiting\n");
        }
        else
          printf("none\n");
      memset(arg2, 0, sizeof(arg2));
    }
    memset(&filename[0], 0, sizeof(filename));
    memset(tempPtr, 0, sizeof(tempPtr)); 
    memset(tmpPtr, 0, sizeof(tmpPtr)); 
    memset(arg1, 0, sizeof(arg1));
    
    close(s);
  }
  
  return 0;

}
コード例 #2
0
ファイル: checkusb.cpp プロジェクト: alongL/checkusb
bool getSimpleInfo(USBDEVICEINFO info, sSimpleDeviceInfo &simpleResult)
{
	if(info.DeviceInfoType != DeviceInfo)
		return false;

		PUSB_NODE_CONNECTION_INFORMATION_EX ConnectionInfo = NULL;
		PSTRING_DESCRIPTOR_NODE             StringDescs = NULL;
		ConnectionInfo = info.ConnectionInfo;
		StringDescs = info.StringDescs;
		simpleResult.idVendor = ConnectionInfo->DeviceDescriptor.idVendor;
		simpleResult.idProduct = ConnectionInfo->DeviceDescriptor.idProduct;

		if (ConnectionInfo->DeviceDescriptor.iManufacturer)
		{
			getString(ConnectionInfo->DeviceDescriptor.iManufacturer,
					StringDescs,
					simpleResult.manufacturer
					);
		}

		if (ConnectionInfo->DeviceDescriptor.iProduct)
		{
			getString(ConnectionInfo->DeviceDescriptor.iProduct,
					StringDescs,
					simpleResult.model
					);
		}

		if (ConnectionInfo->DeviceDescriptor.iSerialNumber)
		{
			getString(ConnectionInfo->DeviceDescriptor.iSerialNumber,
					StringDescs,
					simpleResult.serialNumber
					);
		}
		PUSB_CONFIGURATION_DESCRIPTOR       ConfigDesc = NULL;
		int interfaceNumber = 0;

		//此处指针+1是因为 info->ConfigDesc 是USB_DESCRIPTOR_REQUEST类型, 配置数据在request后面
		if( info.ConfigDesc )
		{
			ConfigDesc = reinterpret_cast<PUSB_CONFIGURATION_DESCRIPTOR> (info.ConfigDesc + 1);
			PUCHAR                  descEnd;
			PUSB_COMMON_DESCRIPTOR  commonDesc;

			//获取设备接口数量
			simpleResult.iNumInterfaces = ConfigDesc->bNumInterfaces;

			descEnd = (PUCHAR)ConfigDesc + ConfigDesc->wTotalLength;
			commonDesc = (PUSB_COMMON_DESCRIPTOR)ConfigDesc;

			while ((PUCHAR)commonDesc + sizeof(USB_COMMON_DESCRIPTOR) < descEnd &&
				(PUCHAR)commonDesc + commonDesc->bLength <= descEnd)
			{
				switch (commonDesc->bDescriptorType)
				{
				case USB_CONFIGURATION_DESCRIPTOR_TYPE:
					if (commonDesc->bLength != sizeof(USB_CONFIGURATION_DESCRIPTOR))
					{
						OOPS();
						break;
					}
					break;

				case USB_INTERFACE_DESCRIPTOR_TYPE:
					if ((commonDesc->bLength != sizeof(USB_INTERFACE_DESCRIPTOR)) &&
						(commonDesc->bLength != sizeof(USB_INTERFACE_DESCRIPTOR2)))
					{
						OOPS();
						break;
					}
					//复制接口数据
					interfaceNumber = ((PUSB_INTERFACE_DESCRIPTOR)commonDesc)->bInterfaceNumber ;
					simpleResult.interfaceInfoArray.push_back(*((PUSB_INTERFACE_DESCRIPTOR)commonDesc));
					break;

				default:
					break;
				}
				commonDesc = reinterpret_cast<PUSB_COMMON_DESCRIPTOR> ((PUCHAR)commonDesc + commonDesc->bLength);
			}
	}

	return true;
}