请问:是不是服务器端每调用一次Send函数想客户端发送消息,客户端就会收到OnReceive通知?
如题!
我在服务器端程序上用一个循环向客户端发送字符串,比如:
for(i = 0; i < 10; i++)
{
MySocket.Send(MyString, strlen);
}
然后在客户端的OnReceiv 事件中写接收的程序:
void MySocket::OnReceive()
{
char buffer[1024];
int nSize;
nSize = MySocket.Receive(buffer, 1024);
buffer[nSize] = '\0';
}
我得本意是,当服务器每发送一次字符串,客户端就接受到一次OnReceive消息,然后用上面的代码接受一个字符串,可是结果不对。所以我想问 是不是服务器端每调用一次Send函数想客户端发送消息,客户端就会收到OnReceive通知?
问题点数:20、回复次数:11Top
1 楼sevencat(七猫)回复于 2003-11-02 15:57:41 得分 10
有可能你会一次将他们全部收到。以前的协议全是在一个命令的最后加上换行符。0x0d0x0a或者用\r\nTop
2 楼Sword_Sharp(多米诺)回复于 2003-11-02 16:06:43 得分 0
to: sevencat(七猫)
不好意思,我还是不太明白“以前的协议全是在一个命令的最后加上换行符。0x0d0x0a或者用\r\n” 可以详细些吗?Top
3 楼Sword_Sharp(多米诺)回复于 2003-11-02 16:39:39 得分 0
upTop
4 楼sevencat(七猫)回复于 2003-11-02 16:46:20 得分 0
就像POP3协议。一般是一行一行的发送。
这样知道在哪里结束了。
pSOcket->Send("RETR 1\r\n");
pSocket->Send("QUIT\r\n")这样发送的。
或者是根据包来发送,包头部长度一定,里面有个数字是表示长度的。这样也可以。Top
5 楼sgnivy(插里一试)回复于 2003-11-02 21:44:59 得分 0
不,建议你用api 来写
别用类,要用的话,csocketfile类和文档累Top
6 楼mjs2000(宁静致远)回复于 2003-11-03 13:03:17 得分 10
是这样的,Socket你适用流的方式,所以你发送一次可能会接收到几次
也就是说可以发生多次OnReceive(你的发送数据太多),还有要用SetSockOpt设定接受和发送的缓冲区大小Top
7 楼lzzqqq(Jonersen)回复于 2003-11-04 15:37:54 得分 0
不是!!!Top
8 楼Sword_Sharp(多米诺)回复于 2003-11-05 09:25:44 得分 0
谁有相关的例子吗?Top
9 楼mjs2000(宁静致远)回复于 2003-11-05 10:15:32 得分 0
你不是自己已经写了一个测试的例子了吗?
你只要把数据发送多一点(大于你的接收缓冲区),就可以接收到多次onreceiveTop
10 楼xxc6(过儿)回复于 2003-11-05 10:36:20 得分 0
我感觉写socket的程序最好不用mfc的类,它是异步socket,不好控制,直接用api来写,很好控制Top
11 楼lostgdi731(O_O)回复于 2003-11-20 16:40:54 得分 0
to mjs2000(宁静致远)
按你的意思就是发送和接收有默认的大少的缓冲区吧?那么默认的是多少?或请你说得更清楚点。谢谢Top




