日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

基于UDP编程_udp详解(基于是什么意思)

發布時間:2023/12/19 综合教程 29 生活家
生活随笔 收集整理的這篇文章主要介紹了 基于UDP编程_udp详解(基于是什么意思) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于UDP編程
1 UDP是數據報協議,無連接的,不可靠,追求傳輸效率的一種通信協議數據的發送和接收是同步的.在進行通信之前,不需要建立連接.其傳輸效率比TCP高.對其服務器而言,并沒有三次握手的過程.因此和TCP相比,少了被動監聽(listen)和(accept).只需要創建通信設備,綁定IP地址和端口號.然后進行數據的收發.

1.服務器端的編程模型

  1. 創建一個socket端點,返回該端點的文件描述符fd socket(2)
    2 )將fd和本地地址綁定 bind(2)

while(1){

3) 阻塞等待客戶端消息 recvfrom(2)
4 )處理客戶消息
5 )將處理結果發送給客戶端 sendto(2)
}
2 客戶端的編程模型
1 創建一個socket端點 socket(2)
2 使用fd設備向服務器發送消息 sendto(2)
3 阻塞等待服務器的響應消息 recvfrom(2)
4 處理響應消息
4 關閉fd設備 close(2)

編程實現
服務器端

#include <stdio.h>
#include <t_net.h>
#include <errno.h>
#include <ctype.h>
#include <string.h>
int main(void){ 
   
    SA4 cli;
    char buf[128];
    socklen_t len;
    int fd = bind_sock(AF_INET,SOCK_DGRAM,8000);
    if(fd == -1){ 
   
        printf("%s\n",strerror(errno));
        return -1; 
    }   
    while(1){ 
   
        len = sizeof(cli);
        int recv = recvfrom(fd,buf,128,0,(SA*)&cli,&len);
        if(recv == -1){ 
   
            printf("%s\n",strerror(errno));
                  return -1;
        }
        for(int i = 0;i < recv;i++){ 
   
            buf[i] = toupper(buf[i]);
        }
        sendto(fd,buf,recv,0,(SA*)&cli,sizeof(cli));
    }
    return 0;
}                                                                     ``

關于t_net.h,參見博主上一篇博客:TCP并發服務的實現
客戶端

#include <stdio.h>
#include <errno.h>
#include <t_net.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>

int main(int argc,char* argv[]){ 
   
    char msg[128];
    char buf[128];
    int fd = socket(AF_INET,SOCK_DGRAM,0);
    if(fd == -1){ 
   
        printf("%s\n",strerror(errno));
        return 0;
    }   
    SA4 serv;
    serv.sin_family = AF_INET;
    serv.sin_port = htons(8000);
    inet_pton(AF_INET,argv[1],&serv.sin_addr);
	while(1){ 
   
        gets(msg);
        //printf("%d\n",sizeof(msg));
        sendto(fd,msg,strlen(msg) + 1,0,(SA*)&serv,sizeof(serv));
        int recv = recvfrom(fd,buf,sizeof(buf),0,NULL,NULL);
        if(recv > 0){ 
   
            //write(1,buf,recv);
            printf("%s\n",buf);
            if(strcmp(buf,"BYEBYE") == 0) break;
        }
    }
    close(fd);
    return 0;
}

總結

以上是生活随笔為你收集整理的基于UDP编程_udp详解(基于是什么意思)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。