基於UDP程式設計
基於UDP程式設計
1 UDP是資料包協議,無連線的,不可靠,追求傳輸效率的一種通訊協議資料的傳送和接收是同步的.在進行通訊之前,不需要建立連線.其傳輸效率比TCP高.對其伺服器而言,並沒有三次握手的過程.因此和TCP相比,少了被動監聽(listen)和(accept).只需要建立通訊裝置,繫結IP地址和埠號.然後進行資料的收發.
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;
}
相關文章
- 基於TCP/UDP的Socket程式設計,HTTP/HTTPS協議TCPUDP程式設計HTTP協議
- Java 基於UDP 實現單播、組播、廣播 Socket 程式設計JavaUDP程式設計
- 網路程式設計-UDP程式設計UDP
- Java 網路程式設計(TCP程式設計 和 UDP程式設計)Java程式設計TCPUDP
- 【網路程式設計】Tcp/Udp程式設計TCPUDP
- Java網路程式設計之UDPJava程式設計UDP
- Python網路程式設計——IP、UDPPython程式設計UDP
- python UDP程式設計是什麼意思?PythonUDP程式設計
- 網路程式設計UDP協議方式程式設計UDP協議
- 【網路程式設計】TCPIP-5-UDP程式設計TCPUDP
- 網路程式設計中TCP與UDP程式設計TCPUDP
- 網路程式設計之 Udp接收資料程式設計UDP
- Java網路程式設計UDP通訊原理Java程式設計UDP
- 網路程式設計原理與UDP實現程式設計UDP
- 非同步程式設計:基於事件的非同步程式設計模式(EAP)非同步程式設計事件設計模式
- 通過 Socket 實現 UDP 程式設計 入門UDP程式設計
- Java網路程式設計--UDP傳送接收資料Java程式設計UDP
- Linux Socket C語言網路程式設計:UDP SocketLinuxC語言程式設計UDP
- Socket程式設計入門(基於Java實現)程式設計Java
- UDP&TCP Linux網路應用程式設計詳解UDPTCPLinux程式設計
- 學會Zynq(11)RAW API的TCP和UDP程式設計APITCPUDP程式設計
- Python網路程式設計實現TCP和UDP連線Python程式設計TCPUDP
- 非同步程式設計:.NET 4.5 基於任務的非同步程式設計模型(TAP)非同步程式設計模型
- 基於TCP協議的Socket網路程式設計( )TCP協議程式設計
- Java&Python的TCP&UDP通訊-網路程式設計JavaPythonTCPUDP程式設計
- Windows程式設計系列:圖形程式設計基礎Windows程式設計
- 基於函數語言程式設計的領域驅動設計 - Scott Wlaschin函數程式設計
- Spring / Spring boot 基於註解非同步程式設計@AsyncSpring Boot非同步程式設計
- 為什麼HTTP/3要基於UDP?可靠嗎?HTTPUDP
- 《UNIX網路程式設計》筆記 - 套接字選項/UDP套接字程式設計筆記UDP
- python程式設計基礎Python程式設計
- shell程式設計基礎程式設計
- Socket程式設計基礎程式設計
- Go程式設計基礎Go程式設計
- Shell程式設計-基礎程式設計
- Java網路程式設計和NIO詳解9:基於NIO的網路程式設計框架NettyJava程式設計框架Netty
- 談談基於機器學習的程式設計到底比傳統程式設計強在哪裡?機器學習程式設計
- 基於c語言的UDP客戶端、服務端二合一基礎程式碼C語言UDP客戶端服務端