socket客户端连续发送数据的问题

bravelion2008 2009-05-10 02:09:20
现在想让客户端以某个速率(如100个请求/秒)向服务器端不断的发出请求,服务器端处理请求后返回一个值给客户端,现在我要在客户端得到每一次请求从send 到receive 的时间,应该怎么样设计程序呢?我是新手,看了一些同步异步,阻塞非阻塞的资料,脑子里一片混乱.所以请教一下这个程序设计的思路
...全文
283 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshichangjiu 2009-05-10
  • 打赏
  • 举报
回复
核对包的id。。然后用收包的时间减去发包的时间.
客户端发送一个请求包到服务端,服务端收到后发送一个确认包,客户端收到确认包,再向服务端发送一个包,告诉服务器我准备好了,然后服务器发送数据包。
BuleRiver 2009-05-10
  • 打赏
  • 举报
回复
下面是我的大概思路:
定义一个记录的结构体:

struct record
{
int record_no;
time_t send_time;
time_t recv_time;

bool operator == (record& rcd)
{
return record_no == rcd.record_no;
}
};
vector<record> records;

发送线程:

time_t send_time = time(NULL);
record tmp = record(no, send_time, 0);
// 要把本记录的序号记录在发送的buf里
memcpy(buf, &no, sizeof(no));
memcpy(buf+sizeof(no), msg, sizeof(msg));// msg中是我们具体的消息
lock(...);// 大概是这样,加锁你可以用互斥变量啊、信号量啊实现,我这里就是说想法,Windows里和Linux里有很大不同
records.push_back(tmp);
un_lock(...); // 解锁
send(...); // 服务端要把我们buf中的记录序号返回给我们。

接受线程:

recv(...);// 把数据接收到recv_buf里
time_t recv_time = time(NULL);
int no;
memcpy(&no, recv_buf, sizeof(no));
record tmp;
tmp.record_no = no;
lock();
vector<record>::iterator iter = find(records.begin(), records.end(), tmp);
unlock();
iter->recv_time = recv_time;
// 得到结果:
cout << "for record: " << no << endl;
cout << "time: " << tmp.recv_time - tmp.send_time << endl;
漁_夫 2009-05-10
  • 打赏
  • 举报
回复
核对包的id。。然后用收包的时间减去发包的时间。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧