请教: 关于多线程中socket的accept问题

icelight 2002-04-26 05:56:05
mySocket处于listen状态,这时有两条请求连接。
处理第一条连接accept(mysocket)得到的SecondSocket与处理第二条连接得到的SecondSocket有什么关系?
返回的这两个SecondSocket是同一个实例吗?
如果我为两条连接打开的两条线程要使用这个SecondSocket很久,会不会冲突?

抱歉我的问题很菜,请前辈帮我搞清一些基本概念,谢谢
...全文
215 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hover 2002-04-27
  • 打赏
  • 举报
回复
..
icelight 2002-04-26
  • 打赏
  • 举报
回复
不行啊...CSocket不允许重载运算符=

void AfxBeginThread(void *pArg)
{
CSocket mySocket,*pSocket;
pSocket = (CSocket *)pArg;
mySocket = * pSocket;
}
其中mySocket = * pSocket这行出错

error C2248: '=' : cannot access private member declared in class 'CSocket'
e:\program files\microsoft visual studio\vc98\mfc\include\afxsock.h(221) : see declaration of '='


查到类CSocket的定义,发现=被禁止重载?
class CSocket : public CAsyncSocket
{
DECLARE_DYNAMIC(CSocket);
private:
CSocket(const CSocket& rSrc); // no implementation
void operator=(const CSocket& rSrc); // no implementation

.......
这是怎么回事?
icelight 2002-04-26
  • 打赏
  • 举报
回复
我去试试先。50分钟后回来。
Yokishiro 2002-04-26
  • 打赏
  • 举报
回复
你在线程函数中定义一个CSocket sock = *pSocket不就行了。
然后就使用这个sock
你客户端有什么反应啊?
icelight 2002-04-26
  • 打赏
  • 举报
回复
是不是这样:
CSocket SecondSocket,otherSocket;
//这里初始化好SecondSocket
//然后把SecondSocket的值赋给otherSocket
otherSocket = SecondSocket;

对不对?
(JAVA中这样做是传实例指引....痛苦的混乱...)
icelight 2002-04-26
  • 打赏
  • 举报
回复
"如何",,不是"如果" P
icelight 2002-04-26
  • 打赏
  • 举报
回复
我试过
CSocket socket,*pSocket;
...
while(){
pSocket = new CSocket;
//....
CWinThread *pThread =
AfxBeginThread(ThreaFunc,pSocket );
}
但客户端的反应总是怪怪的...还是告诉我,如果把一个类的"值"传过去吧?
Yokishiro 2002-04-26
  • 打赏
  • 举报
回复
其实也就是vtable9999(肝肝肝肝) 说的,如果你不分开,就要把secondSocket值传递给线程函数。
socket.accept返回并不冲突,只是你使用的时候不当。
vtable9999 2002-04-26
  • 打赏
  • 举报
回复
两次接受socket要分开,不要用同一个变量。
Yokishiro 2002-04-26
  • 打赏
  • 举报
回复
你上面的代码AfxBeginThread(ThreaFunc,&secondSocket);如果是在线程函数中使用secondSocket,会有冲突吧,除非你把这个secondSocket值传递给线程函数。
icelight 2002-04-26
  • 打赏
  • 举报
回复
如果这样呢?
CSocket socket,secondSocket;
.......
while(true)
{
if(socket.Accept(secondSocket));
//do somework
CWinThread *pThread =
AfxBeginThread(ThreaFunc,&secondSocket);
}
不同线程使用同一个CSocket实例secondSocket,也是没问题的,对吧?
Yokishiro 2002-04-26
  • 打赏
  • 举报
回复
没关系的
不是同一个,因为他们对应的套接口对不同(src ip, src port, des ip ,des port)
所以不会冲突

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧