基于UDP的编程

Posted qiuyuwutong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于UDP的编程相关的知识,希望对你有一定的参考价值。

前提:基于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
", inet_ntop(AF_INET,&clie.sin_addr,IP,128));
        write(1,buf,s);
        strcpy(buf,"gunk you
");
        //将处理结果发送给客户端
        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
";
    //创建通讯端口,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的编程的主要内容,如果未能解决你的问题,请参考以下文章

linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)

网络编程——基于UDP的网络化CPU性能检测

Java网络编程基础---基于UDP编程

基于UDP协议的socket套接字编程 基于socketserver实现并发的socket编程

基于UDP的socket编程

基于UDP的socket编程