C语言中Linux上无连接套接字通信客户端

C语言中Linux下无连接套接字通信客户端
#include <stdio.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <unistd.h> 
#include <fcntl.h> 
#include <sys/stat.h> 
#include <sys/types.h> 
#include <sys/socket.h> /*包含相关的头文件。*/ 
#include <stdlib.h>
#include <string.h>
 
#define REMOTEPORT 4567 /*定义表示端口号的常量。*/ 
#define REMOTEIP "127.0.0.1" /*定义表示表IP的常量。*/ 
 
int main(int argc,char *argv[]) 

  int s,len; /*定义相关的变量。*/ 
  struct sockaddr_in addr; 
  int addr_len; 
  char msg[256]; /*定义一个数组发送与接收数据。*/ 
  int i=0;  
 
  if (( s= socket(AF_INET, SOCK_DGRAM, 0) )<0) /*建立一个socket。*/ 
  { 
  perror("error"); /*输出错误。*/ 
  exit(1); 
  } 
  else 
  { 
  printf("socket created .\n"); /*输出提示信息。*/ 
  printf("socked id: %d \n",s); 
  printf("remote ip: %s \n",REMOTEIP); 
  printf("remote port: %d \n",REMOTEPORT); 
  } 
   
  len=sizeof(struct sockaddr_in); /*长度。*/ 
  bzero(&addr,sizeof(addr)); /*空间地址结构体所在的内存空间。*/ 
  addr.sin_family=AF_INET; /*填充地址与端口的信息。*/ 
  addr.sin_port=htons(REMOTEPORT); /*端口。*/ 
  addr.sin_addr.s_addr=inet_addr(REMOTEIP); 
   
  while (1) /*循环。*/ 
  { 
  bzero(msg,sizeof(msg)); /*清空msg所在的内存。*/ 
  len = read(STDIN_FILENO,msg,sizeof(msg)); /*接收信息。*/ 
  sendto(s,msg,len,0,&addr,addr_len); /*发送信息。*/ 
  printf("\nInput message: %s \n",msg); /*输出结果。*/ 
  len= recvfrom (s,msg,sizeof(msg),0,&addr,&addr_len); 
  /*这是接收到的信息。*/ 
  printf("%d :",i); /*输出计数。*/ 
  i++; /*计数自加。*/ 
  printf("Received message: %s \n",msg); /*这是服务器返回的信息。*/
  }  


运行环境为ubuntu11.04 。问题多多,不知道报错。主要是sendto函数和recvfrom函数出问题。另外addr_len都没有用到。
运行能得到输入的结果。在while中printf("%d :",i); /*输出计数。*/没有打印。

------解决方案--------------------
是不是addr_len没有初始化?

C/C++ code
len=sizeof(struct sockaddr_in); /*长度。*/