我在编写网络服务器程序时,发现在我的recv() 中
传过来的串中有'\0'字符,但其后还有字符,
但我将其赋给char *时,'\0'后的字符就丢失了,
1。请问接受字符串中有'\0' 怎么处理?
2。有关套接字的接受是数组的定义,一般是定义成什么类型啊?谢谢!
传过来的串中有'\0'字符,但其后还有字符,
但我将其赋给char *时,'\0'后的字符就丢失了,
1。请问接受字符串中有'\0' 怎么处理?
2。有关套接字的接受是数组的定义,一般是定义成什么类型啊?谢谢!
调试欢乐多
2。我想一般都是用指针类型吧。
我也在问COM中传入'\0'的问题。http://expert.csdn.net/Expert/topic/2921/2921563.xml?temp=.5057947
int len = strlen (psz);
send (sock, &len, sizeof (len), 0); // 先发送字符串长度
send (sock, psz, len, 0);接收字符串则这样做
int len;
char buf [0x1000];
recv (sock, &len, sizeof (int), 0); // 获得对方发送的字符串长度
recv (sock, buf, len, 0); // 接收字符串的内容
memcpy (psz, buf, len); // 将字符串内容拷由至自己的数据结构中
psz [len] = 0; // 发送的字符串不带 \0这样的话,发送多少字符串都没事
比如:char *szData = buffer;
那么就肯定得到的是第一个段
要得到第二个段就是szData = buffer[段长]
这样可以解决很多问题。
但我要借问一个问题:
如果我传送的数据很大,假如有10M、20M。。我一次
send能行吗?因为socket的缓冲只有8K,这样会失败吗?
第二,如果是正常原因(比如Unicode),那么尝试使用memcpy来得到数据。记住,网络通讯中拷贝数据,最好不要用strcpy,很不安全(容易缓冲区溢出),而且极易出错。