socket如何实现多用户连接!

西安风影 2009-03-12 09:59:27
我本身使用的是CSocket,已经实现了多用户连接,但是无法启用线程发送文件,这是CSocket本身的bug,无法解决。
void CXaInfoServerDlg::ProcessAccept()
{
CSocketClient* pSocketClient=new CSocketClient(this);
if(m_pSocketServer->Accept(*pSocketClient))
{
m_SocketClientList.AddTail(pSocketClient);
}
else
{
delete pSocketClient;
}
}
现在我想用socket函数来实现,但是我不知道用什么思路实现多用户连接,
或者说socket只能实现点对点吗,不能实现同时多个用户与服务器通信吗?

是不是一有用户连接,就启动一个线程呢?
...全文
525 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zceve 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bitwwzhang130 的回复:]
引用 5 楼 cnzdgs 的回复:
对于TCP协议,每个连接要使用一个socket,可以每个连接用一个线程来处理,也可以一个线程处理多个连接;对于UDP协议,只要一个socket就够了。

同意
[/Quote]
UP
bitwwzhang130 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cnzdgs 的回复:]
对于TCP协议,每个连接要使用一个socket,可以每个连接用一个线程来处理,也可以一个线程处理多个连接;对于UDP协议,只要一个socket就够了。
[/Quote]
同意
cnzdgs 2009-03-12
  • 打赏
  • 举报
回复
对于TCP协议,每个连接要使用一个socket,可以每个连接用一个线程来处理,也可以一个线程处理多个连接;对于UDP协议,只要一个socket就够了。
51365133 2009-03-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 friend_880 的回复:]
顺便问问,LZ你的分怎么那么多,怎么得来的
[/Quote]

其它版块的分吧,

TO 楼主

我采用的是完成端口的方式实现的。

C----accept---->S
客户端连接服务器端
C<---port-------S
服务器端返回一个端口给C,同时启动一个AP bind port
C----accept use port----->s.Ap
数据传输 end
C----close port
s.AP ---close

friend_880 2009-03-12
  • 打赏
  • 举报
回复
顺便问问,LZ你的分怎么那么多,怎么得来的
friend_880 2009-03-12
  • 打赏
  • 举报
回复
CSocket可以支持多线程,他是绑定在隐藏窗口上的,窗口是属于线程的。
CSocket一般不用于多线程,如果非要用多线程也可以:
先将SOCKET与窗口解除绑定,SOCKET CSocket.Detach();
然后将解除绑定后的SOCKET传到你的线程中重新绑定到一个CSocket对象上,CSocket.Attach(SOCKET s);
CSocket是基于消息的,所以说它本身不用多线程,也只支持与多个用户通信。

使用socket API,所有功能就要靠自己去实现了。
不过使用socket API更灵活一些,想实现什么功能就实现什么功能。
路人乙2019 2009-03-12
  • 打赏
  • 举报
回复
我觉得最好不要用CSocket类来写东西.

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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