linux UDP网络编程

来源:互联网 发布:数据库测试方法 编辑:程序博客网 时间:2024/06/05 07:49
用户数据报文协议(UDP):

        UDP 提供不可靠的非连接型传输层服务,它允许在源和目的地之间传送数据,而不必在传送数据之前建立对话。它主要用于那些非连接型的应用程序,如:视频点播


UDP流程图:


服务器代码:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <arpa/inet.h>

#define PORTNUM 3333

int main()
{
    int sock_fd;
    struct sockaddr_in my_addr;
    struct sockaddr_in fromaddr;
    int addrlen = sizeof(struct sockaddr);
    struct sockaddr_in addr_client;
    char buf[1024];
    //1.socket
    sock_fd = socket(AF_INET,SOCK_DGRAM,0);
    if(sock_fd < 0)
    {
        printf("socket error\n");
exit(1);
    }
    //2.bind
    bzero(&my_addr,sizeof(struct sockaddr_in));
    my_addr.sin_family = AF_INET;
    my_addr.sin_port = htons(PORTNUM);
    my_addr.sin_addr.s_addr = INADDR_ANY;
    //my_addr.sin_addr.s_addr = inet_addr("192.168.1.11");
    if(bind(sock_fd,(struct sockaddr *)(&my_addr),addrlen) < 0)
    {
        printf("bind error\n");
close(sock_fd);
exit(1);
    }
    while(1)
    {
        bzero(buf,sizeof(buf));
bzero(&fromaddr,sizeof(fromaddr));
        //3.recv
        if(recvfrom(sock_fd,buf,1024,0,(struct sockaddr *)(&fromaddr),&addrlen) > 0)
        {
            printf("buf = %s\n",buf);
        }
        if(sendto(sock_fd,"ok",1024,0,(struct sockaddr *)(&fromaddr),sizeof(struct sockaddr)) < 0)
        {
            printf("send error\n");
        }
if(strncmp(buf,"quit",4) == 0)
{
   break;
}
    }
    //4.close
    close(sock_fd);

    return 0;
}


客户端:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <arpa/inet.h>

#define PORTNUM 3333

int main()
{
    int sock_fd;
    struct sockaddr_in toaddr;    
    struct sockaddr_in fromaddr;
    char buf[1024];
    int addrlen = sizeof(struct sockaddr);
    //1.socket
    sock_fd = socket(AF_INET,SOCK_DGRAM,0);
    if(sock_fd < 0)
    {
        printf("socket error\n");
exit(1);
    }
    //2.send
    bzero(&toaddr,sizeof(toaddr));
    toaddr.sin_family = AF_INET;
    toaddr.sin_port = htons(PORTNUM);
    toaddr.sin_addr.s_addr = inet_addr("192.168.1.11");
    printf("please input buf:");
    scanf("%s",buf);
    if(sendto(sock_fd,(void *)buf,1024,0,(struct sockaddr *)(&toaddr),sizeof(struct sockaddr)) < 0)
    {
        printf("send error\n");
    }
    bzero(&fromaddr,sizeof(fromaddr));
    if(recvfrom(sock_fd,buf,1024,0,(struct sockaddr *)(&fromaddr),&addrlen) > 0)
    {
        printf("buf = %s\n",buf);
    }
    //3.close
    close(sock_fd);

    return 0;
}


0 0
原创粉丝点击