VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1821|回复: 12

网络编程-局域网聊天第7课疑问

[复制链接]
06_avatar_middle
最佳答案
0 
online_vip 发表于 2013-5-5 21:33:35 | 显示全部楼层 |阅读模式
问题1:
如果客户端传来一个“hellow”,如果编译器是使用unicode的话int iRet = recv(m_ClientItem.m_Socket,(char *)szBuf,MAX_BUF_SIZE,0);

iRet = 12
我想问C++中一个字符串结尾肯定是0啊,不是应该返回12加上0的两个字节等于14吗?
问题2:
当有一个客户端连进来的时候,SYC老大的写法是
tItem.hThread = CreateThread(NULL,0,ClientThreadProc,&(pChatRoom->m_ClientArray.GetAt(idx)),CREATE_SUSPENDED,NULL);
pChatRoom->m_ClientArray.GetAt(idx).hThread = tItem.hThread;
ResumeThread(tItem.hThread);
先挂起线程再给线程中的变量赋值。
我试了下:
tItem.hThread = CreateThread(NULL,0,ClientThreadProc,&(pChatRoom->m_ClientArray.GetAt(idx)),0,NULL);
pChatRoom->m_ClientArray.GetAt(idx).hThread = tItem.hThread;
不挂起线程直接赋值,也没问题,我想问,是否我这样做虽然可以但是线程是不安全的,还是说两样没区别?




上一篇:局域网聊天室教学疑问
下一篇:如何从IE浏览器的临时目录里复制文件出来?
22_avatar_middle
最佳答案
0 
online_vip 发表于 2013-5-5 22:20:23 | 显示全部楼层
你那样会有问题的....
06_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2013-5-6 11:30:06 | 显示全部楼层
清水 发表于 2013-5-5 22:20 网络编程-局域网聊天第7课疑问
你那样会有问题的....

我想也是应该有问题的,不过我执行起来是好的,收发信息也没问题,我只是想知道在什么情况下会发生什么养的问题
22_avatar_middle
最佳答案
0 
online_vip 发表于 2013-5-6 13:42:55 | 显示全部楼层
tItem.hThread = CreateThread(NULL,0,ClientThreadProc,&(pChatRoom->m_ClientArray.GetAt(idx)),0,NULL);
pChatRoom->m_ClientArray.GetAt(idx).hThread = tItem.hThread;

在这两行之间,如果运行到获取m_ClientArray.GetAt(idx).hThread的时候就会出现问题的哦...
06_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2013-5-6 17:09:34 | 显示全部楼层
清水 发表于 2013-5-6 13:42 网络编程-局域网聊天第7课疑问
tItem.hThread = CreateThread(NULL,0,ClientThreadProc,&(pChatRoom->m_ClientArray.GetAt(idx)),0,NULL); ...

大哥你能告诉我第一个问题答案吗,字符串“hellow”编译器是unicode编码,为什么字节数是12不是14呢,字符串后面不都是以“/0”结尾的吗不是要12+2吗?
22_avatar_middle
最佳答案
0 
online_vip 发表于 2013-5-6 17:44:19 | 显示全部楼层
yjjdick 发表于 2013-5-6 17:09 网络编程-局域网聊天第7课疑问
大哥你能告诉我第一个问题答案吗,字符串“hellow”编译器是unicode编码,为什么字节数是12不是14呢,字符 ...

int _tmain(int argc, _TCHAR* argv[])
{
        char test[] = "hellow";
        printf("%d\n", strlen(test) * sizeof(TCHAR));
        printf("%d", sizeof(test) * sizeof(TCHAR));
        return 0;
}

看看这记过你可能就会明白.
06_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2013-5-6 17:54:18 | 显示全部楼层
清水 发表于 2013-5-6 17:44 网络编程-局域网聊天第7课疑问
int _tmain(int argc, _TCHAR* argv[])
{
        char test[] = "hellow";

这个我明白,一个是字符串长度一个是字节长度是吗?那你意思是WinSocket下recv返回的是字符串长度吗?因为我Hellow他返回给我是12不是14,我想知道他为什么没把/0算进去,难道字符串他默认结束符是不算的?
22_avatar_middle
最佳答案
0 
online_vip 发表于 2013-5-6 19:14:31 | 显示全部楼层
yjjdick 发表于 2013-5-6 17:54 网络编程-局域网聊天第7课疑问
这个我明白,一个是字符串长度一个是字节长度是吗?那你意思是WinSocket下recv返回的是字符串长度吗?因为 ...

你看看你发送端发送的是多少,还有你问问题的时候,要把场景说清楚.
06_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2013-5-6 22:52:26 | 显示全部楼层
清水 发表于 2013-5-6 19:14 网络编程-局域网聊天第7课疑问
你看看你发送端发送的是多少,还有你问问题的时候,要把场景说清楚.

就一个很简单的WinSocket的使用,一个服务端,一个客户端,我客户端传一个“hellow”字符串服务器那边recv返回长度是12,我想知道为什么不是13或者14,就是为什么不把字符串结尾那个\0算上去,用了是unicode编码
22_avatar_middle
最佳答案
0 
online_vip 发表于 2013-5-7 09:27:50 | 显示全部楼层
yjjdick 发表于 2013-5-6 22:52 网络编程-局域网聊天第7课疑问
就一个很简单的WinSocket的使用,一个服务端,一个客户端,我客户端传一个“hellow”字符串服务器那边rec ...

你看看发送端发送了多少字节,接收端自然接受多少.这个更字符串没有任何关系.不要老是想这是个字符串.
06_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2013-5-7 13:23:03 | 显示全部楼层
清水 发表于 2013-5-7 09:27 网络编程-局域网聊天第7课疑问
你看看发送端发送了多少字节,接收端自然接受多少.这个更字符串没有任何关系.不要老是想这是个字符串.

感谢大哥坚持不懈一直帮我解答!我就是不理解
char c[] = "hellow";
int i = sizeof(c);
i=7因为后面有结束符0
那么我recv接受过来的"hellow"难道没有结束符吗?
22_avatar_middle
最佳答案
0 
online_vip 发表于 2013-5-7 16:02:21 | 显示全部楼层
yjjdick 发表于 2013-5-7 13:23 网络编程-局域网聊天第7课疑问
感谢大哥坚持不懈一直帮我解答!我就是不理解
char c[] = "hellow";
int i = sizeof(c);

无语了...
22_avatar_middle
最佳答案
0 
online_vip 发表于 2013-5-7 16:03:02 | 显示全部楼层
清水 发表于 2013-5-7 16:02 网络编程-局域网聊天第7课疑问
无语了...

加我qq:419317946
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2021-12-4 09:34

Powered by CcTry.CoM

© 2009-2021 cctry.com

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