Socket編程基礎——無鏈接UDP

與面向鏈接的網絡鏈接相比,無鏈接的網絡通訊不須要在服務器與客戶端之間創建鏈接。面向非鏈接的Socket通訊是基於UDP的,服務器端不須要調用listen()accept()函數來等待客戶端的鏈接;客戶端直接向服務器發送數據。服務器

一、服務器端
(1)創建Socket,綁定本地IP和端口網絡

server=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
sAddr.sin_family=AF_INET;
sAddr.sin_port=htons(9000);
sAddr.sin_addr.s_addr=htonl(ADDR_ANY);
retVal=bind(server,(sockaddr*)&sAddr,sizeof(sAddr));

(2)等待客戶鏈接、接收數據socket

sockaddr_in recvAddr;
int len=sizeof(recvAddr);
// 鏈接的客戶端地址信息

recvfrom(server,buf,BUF_SIZE,0,(sockaddr*)&recvAddr,&len);
cout<<"Recv date from "<<inet_ntoa(recvAddr.sin_addr)<<" :"<<buf<<endl;
// 接收數據、recvAddr返回客戶段信息

(3)發送數據函數

sendto(server,buf,strlen(buf),0,(sockaddr*)&recvAddr,len);

二、客戶端
(1)創建Socketcode

client=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);

(2)遠程服務器地址信息server

sockaddr_in sAddr;
sAddr.sin_family=AF_INET;
sAddr.sin_port=htons(9000);
sAddr.sin_addr.s_addr=inet_addr("127.0.0.1");
int len=sizeof(sAddr);

(3)發送數據cli

sendto(client,buf,strlen(buf),0,(sockaddr*)&sAddr,len);

(4)接收數據服務器端

recvfrom(client,buf,BUF_SIZE,0,(sockaddr*)&sAddr,&len);
相關文章
相關標籤/搜索