udp传输本地时间例子

简介: udp传输本地时间例子

linux下udp简单例子:

服务器:

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/time.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#define Myport 2234
int main(void)
{
    int sock;
    char recvbuf[100] = {0};
    char sendbuf[100] = {0};
    struct sockaddr_in cliaddr;
    int clilen = sizeof(struct sockaddr);
int ret = 0;
if( (sock=socket(AF_INET, SOCK_DGRAM, 0)) <0 )
    {
  printf("socket err\n");
  return -1;
    }
struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(struct sockaddr_in));
servaddr.sin_family = PF_INET;
servaddr.sin_port = htons(Myport);
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(sock, (struct sockaddr*)&servaddr, sizeof(servaddr)) <0)
{
    printf("bind err\n");
    perror("bind");
    return -1;
}
printf("net server starting \n");
struct timeval tv = {0};
while(1)
{
ret = recvfrom(sock, recvbuf, sizeof(recvbuf), 0, (struct sockaddr *)&cliaddr, &clilen );
    if(ret <0)
   {
        printf("recvfrom err");
  return -1;
   }
    getsockname(sock, (struct sockaddr*)&cliaddr, (socklen_t*)&clilen );
    printf("recv client addr : %s  data %s\n",inet_ntoa(cliaddr.sin_addr), recvbuf);
    gettimeofday(&tv, NULL);
    memcpy(sendbuf, &tv, sizeof(struct timeval));
    ret = sendto(sock, sendbuf, sizeof(struct timeval), 0, (struct sockaddr *)&cliaddr, clilen  );
    if(ret <0){
  //printf("send err %d\n", ret);
        perror("socket");
  return -1;  
      }
printf(" second :%ld\n ms: %ld\n us: %ld\n", tv.tv_sec, tv.tv_sec*1000+tv.tv_usec/1000,\
  tv.tv_usec);
}//while(true)
    close(sock);
    return 0;
}

客户端

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <sys/time.h>
#define Myport 2234
char *SERVERIP = "192.168.229.129";
int main(void)
{
  struct sockaddr_in servaddr;
  char sendbuf[100] = {0};
  struct timeval recvbuf;
  int sock;
  int ret = 0;
  if( (sock=socket(AF_INET, SOCK_DGRAM, 0)) <0 )
     {
    printf("sock err\n");
    return -1;
     }
memset(&servaddr, 0, sizeof(servaddr) );
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(Myport);
servaddr.sin_addr.s_addr = inet_addr(SERVERIP);
while(1)
{
memset(&recvbuf,0, sizeof(recvbuf) );
printf("start sleep\n");
sendto(sock, "muchx", 5, 0, (struct sockaddr*)&servaddr, sizeof(servaddr) );
recvfrom(sock, (struct timeval*)&recvbuf, sizeof(recvbuf), 0, NULL, NULL);
printf("s:%ld\n  ms:%ld\n us:%ld\n", recvbuf.tv_sec,recvbuf.tv_sec*1000+recvbuf.tv_usec/1000,recvbuf.tv_usec );
sleep(4);
sendto(sock, "muchx", 5, 0, (struct sockaddr*)&servaddr, sizeof(servaddr) );
recvfrom(sock, (struct timeval*)&recvbuf, sizeof(recvbuf), 0, NULL, NULL);
printf("s:%ld\n  ms:%ld\n us:%ld\n", recvbuf.tv_sec,recvbuf.tv_sec*1000+recvbuf.tv_usec/1000,\
 recvbuf.tv_usec );
printf("end sleep\n");
}
return 0;
}

服务器打印:


微信图片_20230117092828.png


客户端打印:


微信图片_20230117092834.png


目录
相关文章
|
6月前
|
缓存 网络协议 网络性能优化
UDP实现可靠传输
UDP实现可靠传输
|
缓存 网络协议 算法
UDP可靠性传输协议kcp
UDP可靠性传输协议kcp
182 1
|
2月前
|
网络协议 网络安全 Python
Python 通过UDP传输超过64k的信息
Python 通过UDP传输超过64k的信息
|
2月前
|
网络协议 网络安全 Python
Python 通过UDP传输超过64k的信息
Python 通过UDP传输超过64k的信息 原创
|
4月前
|
网络协议 网络性能优化
用udp协议传输文件
【7月更文挑战第18天】使用 UDP 协议传输文件 UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的传输协议。尽管它不像 TCP 那样提供可靠的传输和拥塞控制,但在某些特定场景下,例如对实时性要求较高、能容忍一定数据丢失的情况,也可以用于文件传输。
|
6月前
|
缓存 网络协议 物联网
UDP的可靠性传输
UDP的可靠性传输
177 1
|
6月前
|
缓存 网络协议 NoSQL
基于UDP的可靠性传输协议-KCP简介
基于UDP的可靠性传输协议-KCP简介
210 0
|
6月前
|
缓存 网络协议 网络性能优化
UDP的可靠传输/KCP是怎样练成的
UDP的可靠传输/KCP是怎样练成的
174 0
|
6月前
|
缓存 网络协议 算法
UDP的可靠性传输2
UDP的可靠性传输2
85 0
|
6月前
|
缓存 网络协议 算法
UDP如何实现可靠传输
UDP如何实现可靠传输
136 0