Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中的UDP套接字-传递整数值_C_Sockets - Fatal编程技术网

C中的UDP套接字-传递整数值

C中的UDP套接字-传递整数值,c,sockets,C,Sockets,因此,我试图建立一个UDP连接,该连接将接受用户输入的字符串,将其转换为十六进制,并将其发送到服务器。有人告诉我,可以通过套接字发送字符数组以外的内容(这是我以前做过的唯一方法),但我遇到了一些麻烦。首先,当我显式发送一个整数(抱怨将整数转换为指针)时,我收到了大量错误,所以我将它转换为空指针。我没有收到警告消息,但收到了相同的错误 我的问题是:我是否在设置套接字的逻辑中犯了错误,或者我不可能完成我正在尝试的操作 void main(){ /*Create UDP socket*/ c

因此,我试图建立一个UDP连接,该连接将接受用户输入的字符串,将其转换为十六进制,并将其发送到服务器。有人告诉我,可以通过套接字发送字符数组以外的内容(这是我以前做过的唯一方法),但我遇到了一些麻烦。首先,当我显式发送一个整数(抱怨将整数转换为指针)时,我收到了大量错误,所以我将它转换为空指针。我没有收到警告消息,但收到了相同的错误

我的问题是:我是否在设置套接字的逻辑中犯了错误,或者我不可能完成我正在尝试的操作

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);
  }
}
您可以通过套接字发送单个整数。它将以4或8个字节的形式传输,不同CPU类型的字节顺序可能不同,因此这可能是一个问题

但您所做的是尝试使用整数作为指针。你真正想要的是

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

请注意
消息

上运算符“
&
”的地址,您确实不需要“转换为十六进制”。数据已经在计算机和数据链路中以数字方式表示。只需按原样传递字符串。在尝试通过UDP发送任何内容之前,请精确定义要发送的信息应如何编码为一个字节块。我知道它已经转换了,但我需要在稍后添加位填充,我认为这将是最简单的方法,如果它已经是数字形式的话。程序还没有完成,David,我以后会实现它。我想他真正想要的是
sendto(clientSocket,buffer,strlen)(buffer)…
@EugeneSh.:不,因为他费心用ChartPoint将缓冲区转换为整数。为什么发送字符数组时不需要该运算符?那它已经定义为指针了吗?@Michael:没错。C中的数组会衰减为指向第一个数组元素的指针。