基於UDP協議的Socket網路程式設計
一、基於UDP協議的Socket網路程式設計流程:
採用 UDP 套接字方式實現C/S的通訊程式由客戶端和伺服器端兩部分組成。
伺服器端程式依次按以下步驟進行:
1) 呼叫Socket()建立一個資料包套接字;
2) 呼叫 bind()把伺服器地址繫結在該套接字上;
3) 呼叫recvform()等待客戶程式發來的請求,伺服器此時處於無限迴圈狀態;
4) 服務程式接收到客戶程式所發來的資料包後,進行處理,呼叫 sendto()將處理結果返回給客戶程式,返回狀態3) 繼續監聽;
5) 服務程式呼叫 close()撤消套接字,終止服務。
客戶端程式則按以下步驟進行:
1) 呼叫Socket ()建立一個資料流套接字;
2) 呼叫sendto () 向伺服器程式傳送資料包;
3) 呼叫recvfrom()等待伺服器程式返回該處理結果;
4)客戶程式呼叫close()撤消套接字。
二、程式碼如下:
伺服器端程式碼:UDP_server.c
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>
void main()
{
int sock=socket(PF_INET,SOCK_DGRAM,0);
assert(sock!=-1);
struct sockaddr_in ser,cli;//ser服務端,cli客戶端
memset(&ser,0,sizeof(&ser));
ser.sin_family= AF_INET;//地址族
ser.sin_port=htons(6500);//埠號(使用者向網路,以short型別)
ser.sin_addr.s_addr=inet_addr("192.168.1.129");//IP地址
//繫結socket
int res=bind(sock,(struct sockaddr*)&ser,sizeof(ser));
assert(res!=-1);
while(1)
{
char buff[128]={0};
int len=sizeof(cli);
recvfrom(sock,buff,127,0,(struct sockaddr*)&cli,&len);
printf("srcaddr:%s,port:%d\n",inet_ntoa(cli.sin_addr),
ntohs(cli.sin_port));
printf("buff:%s\n",buff);
sendto(sock,"OK",2,0,(struct sockaddr*)&cli,len);
}
close(sock);
}
客戶端程式碼UDP_client.c
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>
void main()
{
int sock=socket(PF_INET,SOCK_DGRAM,0);//第一個引數告訴系統使用哪個底層協議族,對於tcp協議來說,一般設定為PF—INET表示IPv4,PF—INET6表示IPv6;第二個參數列示服務型別為流服務,第三個參數列示預設協議,一般為0;
assert(sock!=-1);
struct sockaddr_in ser,cli;//ser服務端,cli客戶端
memset(&ser,0,sizeof(&ser));
ser.sin_family= AF_INET;//地址族
ser.sin_port=htons(6500);//埠號(使用者向網路,以short型別)
ser.sin_addr.s_addr=inet_addr("192.168.1.129");//IP地址
while(1)
{
printf("please input: "),fflush(stdout);
char buff[128]={0};
fgets(buff,128,stdin);
buff[strlen(buff)-1]=0;
int len=sizeof(cli);
sendto(sock,"OK",strlen(buff),0,(struct sockaddr*)&ser,sizeof(ser));
memset(buff,0,128);
recvfrom(sock,buff,127,0,NULL,NULL);
printf("%s\n",buff);
}
close(sock);
}
相關文章
- 基於TCP/UDP的Socket程式設計,HTTP/HTTPS協議TCPUDP程式設計HTTP協議
- 基於TCP協議的Socket網路程式設計( )TCP協議程式設計
- UDP協議網路Socket程式設計(java實現C/S通訊案例)UDP協議程式設計Java
- Java:基於TCP協議網路socket程式設計(實現C/S通訊)JavaTCP協議程式設計
- 網路程式設計UDP協議方式程式設計UDP協議
- 【網路協議】UDP協議協議UDP
- Socket:UDP協議小白UDP協議
- 網路協議之:基於UDP的高速資料傳輸協議UDT協議UDP
- iOS 網路程式設計(二)UDP協議小結iOS程式設計UDP協議
- 計算機網路之六:UDP協議計算機網路UDP協議
- 基於UDP程式設計UDP程式設計
- 15.基於UDP協議的聊天室程式UDP協議
- 網路協議之:socket協議詳解之Socket和Stream Socket協議
- 網路協議之:socket協議詳解之Datagram Socket協議
- 網路協議之:socket協議詳解之Unix domain Socket協議AI
- Linux Socket C語言網路程式設計:UDP SocketLinuxC語言程式設計UDP
- 網路程式設計協議(TCP和UDP協議,黏包問題)以及socketserver模組程式設計協議TCPUDPServer
- Java Tcp協議socket程式設計學習JavaTCP協議程式設計
- Java 基於UDP 實現單播、組播、廣播 Socket 程式設計JavaUDP程式設計
- Socket.D 基於訊息的響應式應用層網路協議協議
- 一個基於UDP資料廣播的區域網路會議程式UDP
- Socket 程式設計 (網路篇)程式設計
- Python網路程式設計(socket模組、緩衝區、http協議)Python程式設計HTTP協議
- 基於UDP協議的乙太網資料收發控制器UDP協議
- 在C++ Builder中用socket api來寫網路通訊程式(同時支援TCP和UDP協議)C++UIAPITCPUDP協議
- iOS中基於協議的路由設計iOS協議路由
- Python中兩種網路程式設計方式:Socket和HTTP協議Python程式設計HTTP協議
- Python網路Socket程式設計Python程式設計
- Android程式設計師必知必會的網路通訊傳輸層協議——UDP和TCPAndroid程式設計師協議UDPTCP
- 在C++ Builder中用socket api來寫網路通訊程式(同時支援TCP和UDP協議) (轉)C++UIAPITCPUDP協議
- 網路程式設計基礎-socket基礎程式設計
- Java學習筆記之基於TCP協議的socketJava筆記TCP協議
- 網路協程程式設計程式設計
- 通過 Socket 實現 UDP 程式設計 入門UDP程式設計
- 網路程式設計-UDP程式設計UDP
- Python使用socket的UDP協議實現FTP檔案服務PythonUDP協議FTP
- Python 網路資料傳輸協議 TCP 程式設計Python協議TCP程式設計
- [面試∙網路] TCP/IP(四):TCP 與 UDP 協議簡介面試TCPUDP協議