Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.
Краткое обсуждение UDP.
Совет: Ниже приведен текст этой статьи. Следующие случаи приведены для справки.
UDP — это ненадежная служба дейтаграмм без установления соединения.
Каждый раз, когда отправляющая прикладная программа выполняет операцию записи, модуль UDP инкапсулирует ее в дейтаграмму UDP и отправляет ее. Принимающая сторона должна вовремя выполнить операцию чтения для каждой дейтаграммы UDP, иначе пакет будет потерян. Кроме того, если пользователь не укажет достаточное количество буферов приложения для чтения данных UDP, данные UDP будут усечены.
Следовательно, при использовании протокола UDP принимающая сторона должна иметь возможность одновременно получать данные, отправленные отправляющей стороной, в противном случае произойдет потеря данных.
Код следующий (пример):
int main()
{
int sockfd = socket(AF_INET,SOCK_DGRAM,0);
assert( sockfd != -1 );
struct sockaddr_in saddr,caddr;
memset(&saddr,0,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(6000);
saddr.sin_addr.s_addr = inet_addr("127.0.0.1");
int res = bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));
assert( res != -1 );
while(1)
{
int len=sizeof(caddr);
char buff[128]={
0};
recvfrom(sockfd,buff,127,0,(strcut sockaddr*)&caddr,&len);
printf("buff=%s\n",buff);
if(strncmp(buff,"end",3)==0)
{
break;
}
sendto(sockfd,"ok",2,0,(struck sockaddr*)&caddr,sizeof(caddr));
}
close(sockfd);
exit(0);
}
Код следующий (пример):
int main()
{
int sockfd = socket(AF_INET,SOCK_DGRAM,0);
assert( sockfd != -1 );
struct sockaddr_in saddr;
memset(&saddr,0,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(6000);
saddr.sin_addr.s_addr = inet_addr("127.0.0.1");
while(1)
{
char buff[128]={
0};
printf("input\n");
fgets(buff,127,stdin);
if(strncmp(buff,"end",3)==0)
{
break;
}
sendto(sockfd,buff,strlen(buff),0,(struct sockaddr*)&saddr,sizeof(saddr));
memset(&buff,128,0);
int len=sizeof(saddr);
recvfrom(sockfd,buff,127,0,(struct sockaddr*)&saddr,&len);
printf("recv:%s\n",buff);
}
close(sockfd);
exit(0);
}
UDP — это метод передачи без установления соединения, поэтому несколько клиентов могут отправлять данные одновременно. Сервер немедленно выключается и перезапускается, а клиент все еще может отправлять данные. Сервер также может получать данные немедленно.
Заявление об авторских правах: Содержание этой статьи добровольно предоставлено пользователями Интернета, а мнения, выраженные в этой статье, представляют собой только точку зрения автора. Данный сайт лишь предоставляет услуги по хранению информации, не имеет никаких прав собственности и не несет соответствующей юридической ответственности. Если вы обнаружите на этом сайте какое-либо подозрительное нарушение авторских прав/незаконный контент, отправьте электронное письмо, чтобы сообщить. После проверки этот сайт будет немедленно удален.
Издатель: Full stack программист и руководитель стека, укажите источник для перепечатки: https://javaforall.cn/196086.html Исходная ссылка: https://javaforall.cn