C 在流量生成中接收的数据多于发送的数据
我正在开发一代交通工具。 运行Sender/Receiver后,发现我获得的数据比Send to received多。 我错在哪里?计时器也不会在精确的循环时间停止?发送方提前停止,接收方稍后停止 /* gcc CGenS.c-o服务器 gcc CGenS.c-Recv ./Server-m1-s localhost-p5000-z256-t1000-ptt ./Recv-m0-p5000-z256-pT 问题: */C 在流量生成中接收的数据多于发送的数据,c,sockets,C,Sockets,我正在开发一代交通工具。 运行Sender/Receiver后,发现我获得的数据比Send to received多。 我错在哪里?计时器也不会在精确的循环时间停止?发送方提前停止,接收方稍后停止 /* gcc CGenS.c-o服务器 gcc CGenS.c-Recv ./Server-m1-s localhost-p5000-z256-t1000-ptt ./Recv-m0-p5000-z256-pT 问题: */ if(模式==1) { serv_addr.sin_family=AF_IN
if(模式==1)
{
serv_addr.sin_family=AF_INET;
b复制((char*)服务器->h_地址,(char*)和服务地址sin_地址s_地址,服务器->h_长度);
serv_addr.sin_port=htons(端口号);
if(connect(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))<0)
错误(“连接错误”);
对于(i=0;i0)
{
n=读取(newsockfd、缓冲区、数据包大小);
TotalRecv=TotalRecv+数据包大小;
num_pkt_rec++;
printf(“%d字节接收:%d\n”,num\u pkt\u rec,sizeof buffer);
}
gettimeofday(&tv2,NULL);
printf(“总接收时间=%f秒\n”(双精度)(tv2.tv_-usec-tv1.tv_-usec)/1000000+(双精度)(tv2.tv_-sec-tv1.tv_-sec));
printf(“收到的打包机总数:%d\n”,num\u pkt\u rec);
printf(“接收的总字节数:%d\n”,TotalRecv);
关闭(newsockfd);
关闭(sockfd);
}
返回0;
}
终止0
放在buffer[]
中的位置是strlen(buffer)
在write()调用中显示定义行为所需的位置?我认为甚至不应该使用strlen
,而应该简单地使用packet\u size
。另外,TotalRecv=TotalRecv+packet\u size
应该是TotalRecv=TotalRecv+n
,在进行添加之前,您确实应该检查n
结果是否存在可能的错误。嘿,数据问题已经解决..谢谢
if(mode==1)
{
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,(char *)&serv_addr.sin_addr.s_addr, server->h_length);
serv_addr.sin_port = htons(portno);
if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)
error("ERROR connecting");
for (i=0;i<packet_size;i++)
buffer[i]='A';
gettimeofday(&tv1, NULL);
do
{
//#pragma omp parallel private(nthreads, tid)
//{
/* Obtain thread number */
// tid = omp_get_thread_num();
// if (tid == 0)
// {
// nthreads = omp_get_num_threads();
//printf("Number of threads = %d\n", nthreads);
// }*/
n = write(sockfd,buffer,strlen(buffer));
num_pkt_send++;
TotalSend=TotalSend+packet_size;
if (n < 0)
{
error("ERROR writing to socket");
exit(1);
}
printf("%d Bytes Send: %d\n",num_pkt_send,sizeof buffer);
gettimeofday(&tv2, NULL);
//}
} while((tv2.tv_sec-tv1.tv_sec)!=Loop_time);
printf ("Total Sending time = %f seconds\n",(double) (tv2.tv_usec - tv1.tv_usec) / 1000000 + (double) (tv2.tv_sec - tv1.tv_sec));
printf("Total Bytes Send: %d\n",TotalSend);
printf("Total Packet Send: %d\n",num_pkt_send);
close(sockfd);
}
else if (mode==0)
{
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
if (bind(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr))< 0)
error("ERROR on binding");
listen(sockfd,5);
clilen = sizeof(cli_addr);
newsockfd = accept(sockfd,(struct sockaddr *) &cli_addr,
&clilen);
if (newsockfd < 0)
error("ERROR on accept");
bzero(buffer,packet_size);
gettimeofday(&tv1, NULL);
while(n>0)
{
n = read(newsockfd,buffer,packet_size);
TotalRecv=TotalRecv+packet_size;
num_pkt_rec++;
printf("%d Bytes Received: %d\n",num_pkt_rec ,sizeof buffer);
}
gettimeofday(&tv2, NULL);
printf ("Total Receiving time = %f seconds\n",(double) (tv2.tv_usec - tv1.tv_usec) / 1000000 + (double) (tv2.tv_sec - tv1.tv_sec));
printf("Total Packer Received: %d\n",num_pkt_rec);
printf("Total Bytes Received: %d\n",TotalRecv);
close(newsockfd);
close(sockfd);
}
return 0;
}