服务器客户端发送和接收不起作用

时间:2013-12-19 06:18:37

标签: c unix udp

我正在尝试通过示例创建服务器和客户端, 我在网上看到了一个例子,并试图做同样的事情,但它对我不起作用,我不明白为什么。

服务器

int main(int argc, char *argv[])
{
  int socket_fd, cc, fsize;
  struct sockaddr_in  s_in, from;
  struct { char head; u_long  body; char tail;} msg;
  char name[10];

  socket_fd = socket (AF_INET, SOCK_DGRAM, 0);

  bzero((char *) &s_in, sizeof(s_in)); 

  s_in.sin_family = (short)AF_INET;
  s_in.sin_addr.s_addr = htonl(INADDR_ANY);    
  s_in.sin_port = htons((u_short)0x3333);
  fflush(stdout);    
  bind(socket_fd, (struct sockaddr *)&s_in, sizeof(s_in));

  for(;;) {
    fsize = sizeof(from);
    recvfrom(socket_fd,name,sizeof(name),0,(struct sockaddr *)&from,&fsize);
    printf("Got data : %s",name);
    fflush(stdout);
  }

  return 0;
}

客户

int main(int argc, char *argv[])
{
  int socket_fd;   //creating 1 int
  struct sockaddr_in  dest;   
  struct hostent *hostptr;    
  struct { char head; u_long body; char tail; } msgbuf;  
  char name[10];
  socket_fd = socket (AF_INET, SOCK_DGRAM, 0);  
  bzero((char *) &dest, sizeof(dest)); 
  hostptr = gethostbyname(argv[1]);   
  dest.sin_family = (short) AF_INET;   
  bcopy(hostptr->h_addr, (char *)&dest.sin_addr,hostptr->h_length); 
  dest.sin_port = htons((u_short)0x3333);   

  printf("Enter your name: ");
  scanf("%s",name);

  printf("%s",name);
  sendto(socket_fd,name,sizeof(name),0,(struct sockaddr *)&dest,sizeof(dest));
  return 0; 
}

有人可以解释我的问题吗?

1 个答案:

答案 0 :(得分:1)

NUL - 终止你的缓冲区:

int n;
...
n = recvfrom(socket_fd,name,sizeof(name),0,(struct sockaddr *)&from,&fsize);
if (n == -1) {
    perror("recvfrom");
    exit(EXIT_FAILURE);
}
name[n] = '\0';
printf("Got data : %s",name);
...

另请注意,bzerobcopy已弃用,请使用memsetmemmove