常用的udp實現的程式:dns網域名稱系統,nfs網路檔案系統,snmp簡單網路管理協議
ssize_t recvfrom(int sockfd,void *buff,size_t nbytes,int flags,struct sockaddr * from,socklen_t *addrlen);ssize_t sendto(
int sockfd,void *buff,size_t nbytes,int flags,struct sockaddr * to,socklen_t addrlen);
sockfd:描述字
buff:緩衝區指標
nbytes 讀寫位元組數
udp伺服器端
int main(int argc,char **argv)void dg_echo(int sockfd,sa *pcliaddr,socklen_t clilen)
}
sock_dgram:udp套介面
1 函式不能終止
2 伺服器是迭代伺服器,沒有fork呼叫,單一伺服器程序處理所有客戶。
udp客戶機程式:
int main(int argc,char **argv)void dg_cli(file *fp,int sockfd,const sa *pservaddr,socklen_t servlen)
}
改進的dg_cli
void dg_cli(file *fp,int sockfd,const sa *pservaddr,socklen_t servlen)recvline[n] = 0
; fputs(recvline,stdout);
}}
解決辦法:
1 給定由recvfrom返回的ip,在dns中查詢伺服器驗證
2 伺服器配置每個ip位址建立套介面,**ip位址此套介面,
僅在程序已將udp套介面連線到確切的對方後,這些一步錯誤才返回給程序。
在已連線的udp套介面上呼叫connect達到下面兩個目的:
1 指定ip位址和埠號
2 斷開套介面
使用connect連線後再呼叫read write
void dg_cli(file *fp,int sockfd,const sa *pservaddr,socklen_t servlen)}
對傳送的udp進行統計:
staticvoid recvfrom_int(int
);static
intcount;
void dg_echo(int sockfd,sa *pcliaddr,socklen_t clilen)
}static
void recvfrom_int(int
signo)
udp與tcp的伺服器復用:
int main(int argc,char **argv)if(fd_isset(listenfd,&rset))
close(connfd);
}if(fd_isset(udpfd,&rset))
}}
UDP套介面程式設計
常用的udp實現的程式 dns網域名稱系統,nfs網路檔案系統,snmp簡單網路管理協議 ssize t recvfrom int sockfd,void buff,size t nbytes,int flags,struct sockaddr from,socklen t addrlen ssiz...
套介面程式設計
1 struct in addr 4struct sockaddr in 通用套介面位址結構 struct sockaddr int bind int struct sockaddr socklen t strcut sockaddr in serv bind sockfd,struct socka...
套介面程式設計
1 struct in addr 4struct sockaddr in struct sockaddr int bind int struct sockaddr socklen t strcut sockaddr in serv bind sockfd,struct sockaddr serv,s...