c - 通过 UDP 套接字发送十六进制值

标签 c arrays sockets udp hex

我正在尝试通过 udp 套接字发送一组十六进制值,但我不能只接收第一个字节 0x22。有什么问题??提前致谢!!!

PD:如何使用十六进制值打印数组?

/* UDP client in the internet domain */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>
#include <time.h>

void error(const char *);
int main()
{
   int sock, n;
   unsigned int length;
   struct sockaddr_in server;
   struct hostent *hp;
   char buffer[13]={0x22,0x00,0x0d,0xf4,0x35,0x31,0x02,0x71,0xa7,0x31,0x88,0x80,0x00};


   hp = gethostbyname("127.0.0.1");
   if (hp==0) error("Unknown host");

   sock= socket(AF_INET, SOCK_DGRAM, 0);
   if (sock < 0) error("socket");

   server.sin_family = AF_INET;
   bcopy((char *)hp->h_addr, 
        (char *)&server.sin_addr,
         hp->h_length);
   server.sin_port = htons(atoi("6666"));
   length=sizeof(struct sockaddr_in);
   while (1) {
     n=sendto(sock,buffer,strlen(buffer),0,(const struct sockaddr *)&server,length);
     if (n < 0) error("Sendto");
     printf("Sending Packet...\n");
     sleep(1);
   }
   close(sock);
   return 0;
}

void error(const char *msg)
{
    perror(msg);
    exit(0);
}

最佳答案

那是因为你正在使用 strlen(buffer) 而 buffer[1] 是 Null

使用 sizeof(buffer) 代替 strlen(buffer)

关于c - 通过 UDP 套接字发送十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11702673/

相关文章:

c++ - 在 C/C++ 中高效地从结构化文件中读取数据

c - 堆溢出问题 - 可以覆盖 block header ,损坏 Free(),但程序不会崩溃

C 程序 - 在指针变量中存储值

java - 砖 block 位置,在打砖 block 游戏中,使用 Java 中的数组

javascript - 在 Javascript 中用 1 个已知字符和一些未知字符分割字符串

perl - 为什么 Perl 的 IO::Socket::SSL->new() 失败?

c - 如何获取用户输入的文本并计算我正在搜索的单词数

c - 我在 C 中的 FFT 实现有问题

java - 使用 Sockets 在客户端和服务器之间传输 HashMap (JAVA)

Java多客户端socket服务器-饥饿