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