基於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;
}
相關文章
- 基於UDP協議的Socket網路程式設計UDP協議程式設計
- 基於TCP/UDP的Socket程式設計,HTTP/HTTPS協議TCPUDP程式設計HTTP協議
- UDP程式設計(八)UDP程式設計
- Java 基於UDP 實現單播、組播、廣播 Socket 程式設計JavaUDP程式設計
- 網路程式設計-UDP程式設計UDP
- Java 網路程式設計(TCP程式設計 和 UDP程式設計)Java程式設計TCPUDP
- 【網路程式設計】Tcp/Udp程式設計TCPUDP
- Java網路程式設計之UDPJava程式設計UDP
- udp程式設計的那些事與golang udp的實踐UDP程式設計Golang
- 【網路程式設計】TCPIP-5-UDP程式設計TCPUDP
- 網路程式設計中TCP與UDP程式設計TCPUDP
- 網路程式設計UDP協議方式程式設計UDP協議
- Python網路程式設計——IP、UDPPython程式設計UDP
- Python實現UDP包程式設計PythonUDP程式設計
- 15.基於UDP協議的聊天室程式UDP協議
- 網路程式設計之 Udp接收資料程式設計UDP
- python UDP程式設計是什麼意思?PythonUDP程式設計
- Java網路程式設計UDP通訊原理Java程式設計UDP
- 網路程式設計原理與UDP實現程式設計UDP
- 非同步程式設計:基於事件的非同步程式設計模式(EAP)非同步程式設計事件設計模式
- 通過 Socket 實現 UDP 程式設計 入門UDP程式設計
- Java網路程式設計--UDP傳送接收資料Java程式設計UDP
- iOS 網路程式設計(二)UDP協議小結iOS程式設計UDP協議
- [.net 物件導向程式設計基礎] (2) 關於物件導向程式設計物件程式設計
- javascript: 基於原型的物件導向程式設計JavaScript原型物件程式設計
- Socket程式設計入門(基於Java實現)程式設計Java
- 基於CORBA的分散式程式設計(五) (轉)ORB分散式程式設計
- 基於CORBA的分散式程式設計(九) (轉)ORB分散式程式設計
- 基於CORBA的分散式程式設計(十一) (轉)ORB分散式程式設計
- 基於CORBA的分散式程式設計(七) (轉)ORB分散式程式設計
- 基於CORBA的分散式程式設計(十) (轉)ORB分散式程式設計
- 基於執行緒與基於事件的併發程式設計之爭執行緒事件程式設計
- 談談基於機器學習的程式設計到底比傳統程式設計強在哪裡?機器學習程式設計
- 非同步程式設計:.NET 4.5 基於任務的非同步程式設計模型(TAP)非同步程式設計模型
- 學會Zynq(11)RAW API的TCP和UDP程式設計APITCPUDP程式設計
- Linux Socket C語言網路程式設計:UDP SocketLinuxC語言程式設計UDP
- 網路遊戲程式設計師須知 UDP vs TCP(轉)遊戲程式設計師UDPTCP
- 基於TCP協議的Socket網路程式設計( )TCP協議程式設計