免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4299 | 回复: 15
打印 上一主题 下一主题

socket stream怎么判断有进来的数据? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-18 13:22 |只看该作者 |倒序浏览
如果数据是文字, 多于两行怎么判断啊?
这里高手多, 请大家解解我的疑惑. 多谢多谢!!

注明一下, 程序是用C写的.

[ 本帖最后由 esther_l2 于 2006-3-18 13:24 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-03-18 13:28 |只看该作者
不大明白你的意思。 说详细点

论坛徽章:
0
3 [报告]
发表于 2006-03-18 13:39 |只看该作者
Sorry.

我的程序有server 和client, 是一个chat room. Socket建立没问题. 当有第二个人在同一个chat room说话, chat room server会往client发数据. 然后client会把别人说的话显示出来.

我的问题是当server往client发数据的时候, 我的client怎么知道有数据传入呢? 而且数据是多行数据, 用什么函数可以判断啊?

我是新手, 请多指教! 谢谢.

论坛徽章:
0
4 [报告]
发表于 2006-03-18 13:54 |只看该作者
client怎么知道有数据传入呢?
      client和server连接后不要断开,用recv不断接收,收到数据不就知道有数据进来了。
判断数据是多行数据:
    服务器在每行数据后加'\n',
    客户端收到数据存入缓冲后, 在缓冲中查找'\n',即得知一行结束

论坛徽章:
0
5 [报告]
发表于 2006-03-18 14:01 |只看该作者
如果用recv不断接收, 那怎么发送数据呢? 因为是client, 也需要往server发数据. client目前只用一个socket连接server.

论坛徽章:
0
6 [报告]
发表于 2006-03-18 14:30 |只看该作者
那你用非阻塞方式

论坛徽章:
0
7 [报告]
发表于 2006-03-18 18:27 |只看该作者
?????同一个套接字可以双工收发,你一个线程等待接收,另外一个线程也可以发送数据,用select()也可以实现读写同步

论坛徽章:
0
8 [报告]
发表于 2006-03-19 01:17 |只看该作者
select for input
man 2 select

论坛徽章:
0
9 [报告]
发表于 2006-03-19 02:29 |只看该作者
多谢各位提点, 现在明白一点了.

我试着用这两种方法, 可是都有问题

方法一, 用send和recv
send(client_socket, send_buf, strlen(send_buf) + 1, 0);
recv(client_socket, recv_buf, sizeof(recv_buf), 0);
结果recv总读不到, 就停下来不动了

方法二, 用select()
retval=select(1,&read_socks,&write_socks,NULL,&tv);
if (retval==-1)
{
        //failed
}else if (retval==0)
{
        //timeout
}else{
        fprintf(socket_stream, "%s\r\n", buffer);
        fgets(buffer, 80, socket_stream);
        fprintf(stdout, "Got %s\n", buffer);
}
结果总是timeout.
tv的设置是
tv.tv_sec=5;
tv.tv_usec=0;

哪个高手帮忙看看啊.

论坛徽章:
0
10 [报告]
发表于 2006-03-19 10:05 |只看该作者
原帖由 esther_l2 于 2006-3-19 02:29 发表
多谢各位提点, 现在明白一点了.

我试着用这两种方法, 可是都有问题

方法一, 用send和recv
send(client_socket, send_buf, strlen(send_buf) + 1, 0);
recv(client_socket, recv_buf, sizeof(recv_buf), ...



方法一: 请使用多线程,或者多进程。
方法二: read_socks,write_socks 这两个值设置对了吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP