快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

Linux网络编程--5. 用户数据报发送


  我们前面已经学习网络程序的一个很大的部分,由这个部分的知识,我们实际上可以写出大部分的基于TCP协议的网络程序了.现在在Linux下的大部分程序都是用我们上面所学的知识来写的.我们可以去找一些源程序来参考一下.这一章,我们简单的学习一下基于UDP协议的网络程序.
  
  5.1 两个常用的函数
  
  int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr * from int *fromlen)
  int sendto(int sockfd,const void *msg,int len,unsigned int flags,struct sockaddr *to int tolen)
  
  sockfd,buf,len的意义和read,write一样,分别表示套接字描述符,发送或接收的缓冲区及大小.recvfrom负责从sockfd接收数据,如果from不是NULL,那么在from里面存储了信息来源的情况,如果对信息的来源不感兴趣,可以将from和fromlen设置为NULL.sendto负责向to发送信息.此时在to里面存储了收信息方的详细资料.
  
  5.2 一个实例
  
  /* 服务端程序 server.c */
  
  #include
  #include
  #include
  #include
  #include
  #define SERVER_PORT 8888
  #define MAX_MSG_SIZE 1024
  
  void udps_respon(int sockfd)
  {
  struct sockaddr_in addr;
  int addrlen,n;
  char msg[MAX_MSG_SIZE];
  
  while(1)
  { /* 从网络上度,写到网络上面去 */
  n=recvfrom(sockfd,msg,MAX_MSG_SIZE,0,
  (struct sockaddr*)&addr,&addrlen);
  msg[n]=0;
  /* 显示服务端已经收到了信息 */
  fprintf(stdout,"I have received %s",msg);
  sendto(sockfd,msg,n,0,(struct sockaddr*)&addr,addrlen);
  }
  }
  
  int main(void)
  {
  int sockfd;
  struct sockaddr_in addr;
  
  sockfd=socket(AF_INET,SOCK_DGRAM,0);
  if(sockfd
顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论