UDP相关函数

来源:互联网 发布:衣橱软件 编辑:程序博客网 时间:2024/04/28 20:03

欲函数的详细信息,请参考:http://blog.csdn.net/zscfa/article/details/53069499




涉及两个函数readfrom()和sendto()


1、readfrom()

原型:int recvfrom(int sockfd.void * buf,int len, unsigned int flags,struct sockaddr *from,int *fromlen);

作用:通过socket接收数据

参数:sockfd:socket描述符

           buf:接收数据的空间

           len:数据的长度

           flags:一般设置为0

           sockaddr:是连接客户端的socket

           fromlen:sockaddr的长度的地址

返回值:成功返回接收到的字符数,失败-1

头文件:#include<sys/types.h>

              #include<sys/socket.h>


2、sendto()

原型:int sendto(int sockfd,const void*msg,int len,unsigned int flags,const struct sockaddr *to,int tolen);

作用:通过socket传送数据

参数:sockfd:socket描述符

           buf:接收数据的空间

           len:数据的长度

           flags:一般设置为0

           sockaddr:是连接客户端的socket

           fromlen:sockaddr的长度

返回值:成功返回实际传送出去的字符数,失败-1

头文件:#include<sys/types.h>

              #include<sys/socket.h>


udpser.c

#include<stdio.h>#include<strings.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<errno.h>#include<stdlib.h>int main(){    int sockfd;    int addrlen = sizeof(struct sockaddr);    char buf[512];    struct sockaddr_in ser_addr;    struct sockaddr_in cli_addr;    sockfd = socket(AF_INET,SOCK_DGRAM,0);    if(sockfd < 0)    {        printf("socket error!\n");exit(0);    }    bzero(&ser_addr,addrlen);    ser_addr.sin_family = AF_INET;    ser_addr.sin_port = htons(8888);    ser_addr.sin_addr.s_addr = inet_addr("192.168.2.30");    //sleep(2);    if((bind(sockfd,(struct sockaddr*)&ser_addr,addrlen)) < 0)    {        fprintf(stderr,"bind error:%s\n",strerror(errno));exit(1);    }    fprintf(stderr,"server get connection from %s\n",inet_ntoa(cli_addr.sin_addr));    while(1)    {        if(recvfrom(sockfd,buf,512,0,(struct sockaddr*)&cli_addr,&addrlen) < 0)        {            printf("recv error!\n");        }        printf("read is = %s\n",buf);        memset(buf,0,512);printf("please input a char:");fgets(buf,512,stdin);        if(sendto(sockfd,buf,512,0,(struct sockaddr*)&cli_addr,addrlen) < 0)        {            printf("send error!\n");        }    }           close(sockfd);}

udpclien.c

#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<strings.h>#include<errno.h>int main(){    int sockfd;    int addrlen = sizeof(struct sockaddr);    char buf[512];    struct sockaddr_in ser_addr;    sockfd = socket(AF_INET,SOCK_DGRAM,0);    if(sockfd < 0)    {        printf("socket error!\n");    }        bzero(&ser_addr,addrlen);    ser_addr.sin_family = AF_INET;    ser_addr.sin_port = htons(8888);    ser_addr.sin_addr.s_addr = inet_addr("192.168.2.30");     while(1)    {    printf("please input char:");        fgets(buf,512,stdin);        if((sendto(sockfd,buf,512,0,(struct sockaddr*)&ser_addr,addrlen)) < 0)        {            fprintf(stderr,"send error:%s\n",strerror(errno));        }        memset(buf,0,512);if(recvfrom(sockfd,buf,512,0,(struct sockaddr*)&ser_addr,&addrlen) <0){                fprintf(stderr,"recv error:%s\n",strerror(errno));}printf("read is %s\n",buf);    }    close(sockfd);}




0 0
原创粉丝点击