LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1156|回复: 13

socket问题

[复制链接]
发表于 2006-4-23 20:47:28 | 显示全部楼层 |阅读模式
在Linux下,用c语言写了一个服务器,然后使用java的一个applet,就是jta26作为客户端,结果服务器向客户端发送的数据可以正常接收并且显示,但是,客户端发的数据,服务器端只能收到一个,比如输入 hello 服务器只显示h 并且显示收到1个字符,这是为什么啊??
发表于 2006-4-23 21:02:32 | 显示全部楼层
怎么接收的? 一般来说无论是发送还是接收都要假设会失败而不是成功. 换句话说, 应该用循环语句不停地进行发送或者是接收. 发送成功的判定原则是发送成功的总字节数等于待发送数据的字节数. 接收数据的判定则要根据具体问题具体分析, 一般在接收前用 select 判定一下比较好, 否则若是被阻塞则会影响程序的其他处理
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-24 10:50:08 | 显示全部楼层
if ((recvbytes=recv(client_fd,buf,BUFFERSIZE,0))==-1)
              perror("recv出错");
           printf("%d",recvbytes);
           buf[recvbytes]='\0';
           int j;/*显示从jta26收到的字符*/
           for (j=0;j<recvbytes;j++)
            printf("Received:%c",buf[j]);
     

是这样接收数据和显示数据的,麻烦帮我看看是不是错了?
回复 支持 反对

使用道具 举报

发表于 2006-4-26 09:12:34 | 显示全部楼层
c: single character;
s: print characters from the string until a '\0' or the number of characters given by the precision(default 6)

maybe u will get:
Received:hReceived:eReceived:l ...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-26 09:26:15 | 显示全部楼层
可是只显示了 h,后面都没有,按理说是循环输出字符,和c或s有关系么?
回复 支持 反对

使用道具 举报

发表于 2006-4-26 09:49:50 | 显示全部楼层
#gcc -g -c xxx.c
#gcc -g xxx.o -o xxx

then debug with GDB

#gdb xxx
回复 支持 反对

使用道具 举报

发表于 2006-4-26 13:34:11 | 显示全部楼层
楼主的接收只有一次, 这是不能保证完成全部数据的接收的. 看看 select 函数的相关资料吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-26 15:40:09 | 显示全部楼层

再问一句

怎么才能让客户端和服务器一旦连接上了,就可以进行多次相互通信呢?直到有一端断开连接为止?
回复 支持 反对

使用道具 举报

发表于 2006-4-30 09:26:50 | 显示全部楼层
用shutdown取代close
回复 支持 反对

使用道具 举报

发表于 2006-4-30 10:44:48 | 显示全部楼层
http://blog.csdn.net/fengyv/archive/2006/04/12/659980.aspx
不知道这篇文章对楼主有没有用
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表