码迷,mamicode.com
首页 > 其他好文 > 详细

基于UDP的编程

时间:2018-07-22 17:04:58      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:clu   int   业务   结果   add   lin   not   soc   mil   

前提:基于Linux系统的学习

服务器端编程模型
1 socket(2) 创建通讯端点,返回一个文件描述符fd
2 bind(2) 将fd绑定到本地的地址和端口
while(1){
阻塞等待客户端请求数据的到来 recvfrom(2)
业务处理
将处理结果发送给客户端sendto(2)
}

#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <string.h>
#include <arpa/inet.h>

int main(){
    char IP[128];
    char buf[128];
    struct sockaddr_in serv;
    struct sockaddr_in clie;
    socklen_t clie_len;
    //创建socket通讯端口,fd
    int fd=socket(AF_INET,SOCK_DGRAM,0);
    if(fd==-1){
        perror("socket");
        return -1;
    }
    //初始化serv的成员
    serv.sin_family=AF_INET;
    serv.sin_port=htons(7007);
    serv.sin_addr.s_addr=htonl(INADDR_ANY);
    //将fd绑定到服务器
    int b=bind(fd,(struct sockaddr*)&serv,sizeof(serv));
    if(b==-1){
        perror("bind");
        return -1;
    }
    while(1){
        clie_len=sizeof(clie);
        //阻塞等待客户端的请求
        ssize_t s=recvfrom(fd,&buf,128,0,(struct sockaddr*)&clie,&clie_len);
        if(s==-1){
            perror("recvfrom");
            return -1;
        }

        printf("%s\n", inet_ntop(AF_INET,&clie.sin_addr,IP,128));
        write(1,buf,s);
        strcpy(buf,"gunk you\n");
        //将处理结果发送给客户端
        sendto(fd,buf,strlen(buf),0,(struct sockaddr*)&clie,sizeof(clie));
    }
    close(fd);
}

 

客户端编程模型
1 创建通讯端点,返回一个文件描述符fd
2 使用fd向服务器发送消息
3 阻塞等待服务器的响应消息
4 将得到的消息处理
5 关闭fd.

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <arpa/inet.h>
int main(){
    char buf[128];
    struct sockaddr_in serv;
    char* msg="hector client\n";
    //创建通讯端口,fd
    int fd=socket(AF_INET,SOCK_DGRAM,0);
    if(fd==-1){
        perror("socket");
        return -1;
    }
    //初始化serv的成员
    serv.sin_family=AF_INET;
    serv.sin_port=htons(7007);
    inet_pton(AF_INET,"127.0.0.1",&serv.sin_addr);
    //使用fd向服务器发送消息
    sendto(fd,msg,strlen(msg),0,                (struct sockaddr*)&serv,sizeof(serv));
    //阻塞等待服务器的响应
    ssize_t r=recvfrom(fd,buf,128,0,NULL,NULL);
    if(r==-1){
        perror("recvfrom");
        return -1;
    }
    //将得到的消息处理
    write(1,buf,r);
    //关闭fd
    close(fd);
    
    
    return 0;
}

 

基于UDP的编程

标签:clu   int   业务   结果   add   lin   not   soc   mil   

原文地址:https://www.cnblogs.com/qiuyuwutong/p/9350111.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!