2015-05-20 4 views
0

Итак, я пытаюсь настроить соединение UDP, которое приведет к введенной пользователем символьной строке, преобразует ее в шестнадцатеричную и отправит ее на сервер. Мне сказали, что можно отправлять вещи, отличные от массива символов, через сокеты (это единственный способ, которым я это делал раньше), но я ударил несколько стен. Во-первых, я получал целую нагрузку ошибок, когда я явно отправил целое число (жалуясь на то, что целое число цепляется на указатель), поэтому вместо этого я использовал его как указатель на пустоту. Я не получаю предупреждающие сообщения, но получаю ту же ошибку.UDP-сокеты в C - Передача целочисленных значений

Мой вопрос: допустил ли я ошибку в логической настройке сокета, или невозможно сделать то, что я пытаюсь сделать?

void main(){ 

    /*Create UDP socket*/ 
    clientSocket = socket(PF_INET, SOCK_DGRAM, 0);     //setup the socket with an address structure and frame type 

    /*Configure settings in address struct*/ 
    serverAddr.sin_family = AF_INET;         //set the type of address 
    serverAddr.sin_port = htons(7891);        //set the port number you'll be using 
    serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");    //set the address you're sending to 
    memset(serverAddr.sin_zero, '\0', sizeof serverAddr.sin_zero); //Just something that needs to be done 

    /*Initialize size variable to be used later on*/ 
    addr_size = sizeof serverAddr; 
    pthread_t thread; 
    int t = 0; 
    int message; 

    while(1){ 
    memset(buffer, '\0', sizeof buffer); 
    printf("Type a sentence to send to server:\n"); 
    fgets(buffer,1024,stdin); 
    printf("You typed: %s",buffer); 
    message = ChartoInt(buffer); 
    printf("You are sending: %x\n", message); 
    /*Send message to server*/ 
    t = sendto(clientSocket,(void*)message,sizeof(message),0,(struct sockaddr *)&serverAddr,addr_size); 
    printf("The Value of t is %x\n",t); 
    } 
} 
+0

Вам действительно не нужно «конвертировать в шестнадцатеричный». Данные уже представлены численным образом внутри компьютера и линии передачи данных. Просто передайте строку как есть. –

+0

Прежде чем пытаться отправить что-либо через UDP, точно определите, как информация, которую вы собираетесь отправлять, должна быть закодирована как кусок байтов. –

+0

Я знаю, что он уже конвертирует его, но мне нужно добавить бит набивки позже, и я подумал, что это будет самый простой способ сделать это, если бы он был уже в числовой форме. Программа никоим образом не закончена, Дэвид, я буду реализовывать ее позже. – Michael

ответ

0

Вы можете отправить одно целое через сокет. Он будет перемещаться как 4 или 8 байтов, и порядок байтов может отличаться для разных типов ЦП, так что это может быть проблемой.

Но вы пытаетесь использовать целое число как указатель. То, что вы действительно хотите что-то вроде

t = sendto(clientSocket,&message,sizeof(message),0,(struct sockaddr *)&serverAddr,addr_size); 

Обратите внимание на адрес-оператора «&» на message.

+0

Я думаю, что он действительно хочет, это 'sendto (clientSocket, buffer, strlen (buffer) ...' –

+0

@EugeneSh .: Нет, потому что он обратился к проблеме конвертации буфера в целое число с ChartoInt. –

+0

Да, но я подумайте, что * правильный * путь должен быть показан также ... –

Смежные вопросы