关于流套接字和数据报套接字?

liuyinjun 2002-01-06 01:09:39
近日看VC++在线书籍,资料中多次提及流套接字比数据报套接字好,既然如此,数据报套接字用来干什么?
另外,在套接字与归档一起工作时,一个客户与另一个客户如何通过服务器进行数据传送?因为服务器是被动工作的,他在一个客户提出请求后才响应,如果他在接受到一个客户传来的数据后需要转发给另一个客户,他怎么向另一个客户传送?
...全文
548 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
netboys 2002-01-06
  • 打赏
  • 举报
回复
网络上的聊天软件代码多不胜数
我们这学期的课程设计的课题是模拟QQ通讯,用到了CSocket,关键部分就是上面说的那部分
如果你需要这方面的东东,可以EMAIL:wzh1999@263.net
希望你也可以给我一些网络编程方面的信息,THANKS
liuyinjun 2002-01-06
  • 打赏
  • 举报
回复
re: netboys And chzy00:
其实我想知道的是一个聊天软件的工作过程,我的VC++5.0上的例程用不起。故前来讨教。分数不多,只能给回答我的问题的四位朋友每人5分了。再次感谢你们!!
netboys 2002-01-06
  • 打赏
  • 举报
回复
接上:
*m_arOut<<……;
m_arOut->Flush();
这时就向刚才指定的m_ClientSocket套接字发送数据
netboys 2002-01-06
  • 打赏
  • 举报
回复
m_file=new CSocketFile(m_ClientSocket);
m_arIn=new CArchive(m_file,CArchive::load);
m_arOut=new CArchive(m_file,CArchive::store);

m_ClientSocket就是对方的套接字:包括了对方的IP、PORT等;
逸少 2002-01-06
  • 打赏
  • 举报
回复
创建一个套接字作为服务器(调用 socket 函数,或使用 CSocket::Create ,然后与服务器的 IP 抵制绑定(调用 bind 函数, CSocket 类不需要,因 Create 以调用过),然后进行侦听(调用 listen,或 CSocket::Listen ),然后在一个循环中调用 accept 或 CSocket::Accept 接受客户端的连接,他们分别返回一个 SOCKET 句柄 或 得到 CSocket对象,得到的套接字就是客户端的,向该套接字写的信息就传送到客户端,从其读到的信息就是客户端发送的,与多个客户通信,你可以接受多个客户的连接,个个客户是独立的,从一个客户读取信息,在写入另一个客户,即可实现转发。

SOCKET client = accept(Server,(sockaddr* )&s_addr,(int*)&addrlen);
后面两个参数可以用 NULL.
得到一个连接,返回其句柄,否则,返回 INVALID_SOCKET.

用 CSocket 类时:
调用:
while(1)
{
tr = Server.Accept(ClientSock);
if(tr == TRUE)
{ // 接收到一个连接
....
}
else
{ // 没有受到连接...
}
}
BOOL Accept(CAsyncSocket& rConnectedSocket,
SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen = NULL);
成功返回 TRUE , rConnecteSocket 为客户端套接字。
liuyinjun 2002-01-06
  • 打赏
  • 举报
回复
Re:netboy:
但服务器在发送时,一般是这种代码模式:
..>>ar;ar.Flush();
他如何知道发发往何方?
liuyinjun 2002-01-06
  • 打赏
  • 举报
回复
感谢两位,第2个问题能否赐教?
netboys 2002-01-06
  • 打赏
  • 举报
回复
数据报套接字是用来发送数据报的,是面向无连接不可靠的传输(在今天这个网络里,其实已经相当可靠),流套接字是面向连接可靠的传输。服务器通过转发实现一个客户与另一个客户的数据传送。当向另一个客户转发时,他必须知道对方IP(或套接字等),所以要求转发的客户必须提供关于接受方的信息,否则服务器不知道向哪转发。
hujun614 2002-01-06
  • 打赏
  • 举报
回复
流套接字比数据报套接字好,这样你可以不必管理底层细节,只需要相信TCP就可以保证传送的数据是依次,可靠的传送的,缺点是效率相对数据报套接字低。
使用数据报套接字,可以让你更快,但你得自已保证数据是否依次,准确的传送来的,
如使用数据报套接字,你可能先收到后发的,后收到先发的,还有可能收漏,

eion 2002-01-06
  • 打赏
  • 举报
回复
流式套接字要分客户和服务器,而数据报不用分
流式套接字适合传输数据量大的,而数据报套接字适合传递数据量少的
流式套接字建立麻烦,数据报套接字建立简单
客户的流式套接字只能向一个方向传递,数据报套接字可以接受任何方向的来得数据,并可以向任何地址发送数据报

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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