当前位置:   article > 正文

UNIX网络编程笔记(6)—UDP网络编程_fdisset

fdisset

基本UDP套接字编程

1. 概述

TCP和UDP的本质区别就在于:UDP是无连接不可靠的数据报协议,TCP是面向连接的可靠字节流。因此使用TCP和UDP编写的应用程序存在一些差异。使用UDP编写的一些常见的应用程序有:DNS(域名解析系统)、NFS(网络文件系统)和SNMP(简单网络管理协议)。


2. sendto和recvfrom函数

类似与标准的read和write函数:

#include <sys/socket.h>
ssize_t recvfrom (int sockfd,void *buff,size_t nbytes,int flags,
                struct sockaddr *from,socklen_t *addrlen);
ssize_t sendto (inat sockfd,const void * buff,size_t nbytes,int flags,
                const struct sockaddr*to,socklen_t addrlen);
  • 1
  • 2
  • 3
  • 4
  • 5

参数说明:
回忆read和write函数,前三个参数分别是:fd,buf,nbytes分别表示:描述符,指向读入或写出缓冲区的指针和读写的字节数,跟我们上述的recvfrom和sendto就是对应的。

对于sendto来说,顾名思义,我们需要一个参数包含数据报接收者的协议地址(IP和端口号),上述 const struct sockaddr * to就是这样一个参数,它指向了接收者的协议地址,另外我们需要一个addrlen,防止内核读取指针地址越界,这个套路跟以前见过TCP套接字函数中的用法一样。

对于recvfrom来说,struct sockaddr * fromsocklen_t *addrlen是值-结果参数,返回发送数据者的协议地址结构,如果部关系发送者的协议地址,那么我们可以完全把这两个参数设定为NULL。


3. UDP回射服务器程序

最基本的UDP回射服务器程序。

#include <stdio.h>  
#include <stdlib.h>  
#include <unistd.h>  
#include <errno.h>  
#include <sys/types.h>  
#include <sys/socket.h>  
#include <netinet/in.h>  
#include <string.h>  

#define SERV_PORT 1024
#define MAXLEN 1024

void dg_echo(int sockfd,struct sockaddr*pcliaddr,socklen_t clilen);
int main()
{
    int sockfd;
    struct sockaddr_in servaddr,cliaddr;
    if((sockfd=socket(AF_INET,SOCK_DGRAM,0))<0)
    {
        printf("socket error\r\n");
        return -1;
    }
    //服务器套接字结构
    memset(&servaddr,0x00,sizeof(servaddr));
    servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
    servaddr.sin_port=htons(SERV_PORT);
    servaddr.sin_family=AF_INET;


    bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
    dg_echo(sockfd,(struct sockaddr *)&cliaddr,sizeof(cliaddr));
    return 0;
}
void dg_echo(int sockfd ,struct sockaddr* pcliaddr,socklen_t clilen)
{
    char buf[MAXLEN];
    int n;
    int len = clilen;
    while(1)
    {
        if((n=recvfrom(sockfd,buf,MAXLEN,0,pcliaddr,&len))<=0)//阻塞
        {
            printf(
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/158767
推荐阅读
相关标签
  

闽ICP备14008679号