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;
}

服務器打印:

 

 

 

 

 

 

客戶端打印:

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章