- 论坛徽章:
- 0
|
原帖由 kggg 于 2009-3-1 09:53 发表 ![]()
嗯, 那怎么写
用write吗
那倒不是.
这个程序在用scanf(...)的条件下是能正确运行的(前提是buf不能满),建议你检查以下server端的代码.
指的是另外一个方面:
从你的这段程序里可以看出:
1. 你用的协议是定长段发送和定长段接收. //见 send(sockfd, buf, sizeof(buf), 0) 和 read(sockfd, buf, sizeof(buf))
2. 你交换的信息只限于文本. //见 printf("Message from server: %s\n", buf);
那么从程序的思想来看,buf是1024个byte,一般而言scanf("%s", buf) 不会使buf占满. 但至少从程序逻辑来看,没有判断buf满了如何处理,
也就是要严格保证buf中有0x00字符.你这里是事前用了memset(buf,0x00,sizeof(buf)来保证了0x00字符,但不是事后,对于printf(...),buf中的0x00是必须要保证的.
而对于这句:
len=read(sockfd, buf, sizeof(buf))
printf("Message from server: %s\n", buf);
注意并不能保证一次过来的数据一定是sizeof(buf)长的,也即len=sizeof(buf)不一定满足,那么数据就会有遗留,你还要处理余下的,直到收完定长的数据包sizeof(buf)后才能算接收完毕.
[ 本帖最后由 system888net 于 2009-3-1 10:10 编辑 ] |
|