做一个server端怎么办才能收发数据

zahlink 2005-08-31 12:40:59
想做个server端,client连上了之后,如果我这里有数据发给client端就能send,如果client有数据过来就读,现在我只能读完了之后立刻回复一条,不能直接就给client发,有没有个小demo看看,这个是我accept之后做的事情
while(1)
{
timeout.tv_sec = 120;
timeout.tv_usec = 0;
FD_ZERO(&readset);
FD_SET(socket,&readset);
if(select(socket+1,&readset,NULL,NULL,&timeout) < 1)
{
close(socket);
trans->is_stop = 1;
return 0;
}
mylen=recv(socket,&buf,sizeof(buf),0);
if(mylen==-1)
{
puts("recv error");
return 0;
}
if(mylen>0)
{
puts("recv");
puts(buf);
readmsg(buf);
}
strcpy(sendbuf,"123");
len=strlen(sendbuf);
if(send(socket,&sendbuf,len,0) == -1)
{
close(socket);
trans->is_stop = 1;
return 0;
}

}
...全文
97 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjf7888 2005-08-31
  • 打赏
  • 举报
回复
你上面得代码最好放在一个线程内。加一个发送缓冲链表,select时在加一个writeset,判断为可写时就从发送缓冲链表内取一项发送出去,循环...
sharkhuang 2005-08-31
  • 打赏
  • 举报
回复
一般accept后都开一个线程
yyy790601 2005-08-31
  • 打赏
  • 举报
回复
你的select只有读队列,在client没有传信息来之前就阻塞住了,当然不能先往client写了。
建议开两个进程,一个专门读,一个专门写,进程间通过ipc通讯。

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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