#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdint.h>
#include <sys/ioctl.h>
#include <sys/time.h>
#define PORT 31500
int main(){
int sockfd,len;
struct sockaddr_in addr;
int addr_len = sizeof(struct sockaddr_in);
char buffer[256];
if((sockfd=socket(AF_INET,SOCK_DGRAM,0))<0){
perror ("socket");
exit(1);
}
bzero ( &addr, sizeof(addr) );
addr.sin_family=AF_INET;
addr.sin_port=htons(PORT);
addr.sin_addr.s_addr=htonl(INADDR_ANY) ;
if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr))<0){
perror("connect");
exit(1);
}
struct timeval tv, tvNow,tvRes;
while(1){
bzero(buffer,sizeof(buffer));
len = recvfrom(sockfd,buffer,sizeof(buffer), 0 , (struct sockaddr *)&addr ,(socklen_t*)&addr_len);
printf("receive from %s\n" , inet_ntoa( addr.sin_addr));
int iRet = ioctl(sockfd, SIOCGSTAMP, &tv);
gettimeofday(&tvNow, NULL);
uint64_t ddwNow = tvNow.tv_sec*1000000 + tvNow.tv_usec;
uint64_t ddwTv = tv.tv_sec*1000000 + tv.tv_usec;
printf("Now:%lu Tv:%lu dff:%lu\n",ddwNow,ddwTv,(ddwNow - ddwTv)/1000000);
sleep(10);
}
return 0;
}
import socket
address = (‘127.0.0.1‘,31500)
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True:
msg = raw_input()
if not msg:
break
s.sendto(msg,address)
s.close()#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdint.h>
#include <sys/ioctl.h>
#include <sys/time.h>
#define SERVPORT 31500
int main(int argc, char **argv)
{
int sockfd;
struct sockaddr_in srvAddr;
sockfd = socket(AF_INET ,SOCK_DGRAM,0 );
if(sockfd< 0 )
{
printf("socket error\n");
return 0;
}
bzero(&srvAddr, sizeof(srvAddr) );
srvAddr.sin_family = AF_INET;
srvAddr.sin_port = htons(SERVPORT);
srvAddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(sockfd, (struct sockaddr*)&srvAddr,sizeof(srvAddr));
while(1)
{
struct msghdr msg;
struct sockaddr_in clientAddr;
msg.msg_name = &clientAddr;
msg.msg_namelen= sizeof(clientAddr);
struct iovec iov;
msg.msg_iov = &iov;
msg.msg_iovlen =1;
char text[1024] ;
iov.iov_base= text;
iov.iov_len = sizeof(text);
char ctrl[CMSG_SPACE(sizeof(struct timeval))];
struct cmsghdr *cmsg=(struct cmsghdr*)&ctrl;
msg.msg_control = (caddr_t)ctrl;
msg.msg_controllen = sizeof(ctrl);
int rc = recvmsg(sockfd,&msg,0);
if(rc== -1)
{
printf("recvmsg error\n");
return 0;
}
struct timeval tv, tvNow,tvRes;
if(cmsg->cmsg_level ==SOL_SOCKET&&
cmsg->cmsg_type ==SCM_TIMESTAMP &&
cmsg->cmsg_len ==CMSG_LEN(sizeof(tv))
)
memcpy(&tv,CMSG_DATA(cmsg),sizeof(tv));
gettimeofday(&tvNow, NULL);
uint64_t ddwNow = tvNow.tv_sec*1000000 + tvNow.tv_usec;
uint64_t ddwTv = tv.tv_sec*1000000 + tv.tv_usec;
printf("Now:%lu Tv:%lu dff:%lu\n",ddwNow,ddwTv,(ddwNow - ddwTv)/1000000);
sleep(10);
}
} 原文:http://blog.csdn.net/jiang1013nan/article/details/19041225