SOCKET问题,请高手回答!
我现在在写一个异步的SOCKET软件,是一个对话框模式的仿QQ的东东,现在是我如果要登录,是在初始化主对话框时才调用登录框,而在主窗体中
BOOL CICClientDlg::OnInitDialog()
{
CDialog::OnInitDialog();
TCPBind();
UDPBind();
ConnectToSer();
passlogin=false;
//在这里启动登录
CLogin login;
int nResponse = login.DoModal();
if (nResponse == IDOK)
{
CString str1;
username=login.m_username;
char buffer[50];
password=login.m_password;
str1.Format("%8s%5s%32s","#!CTSLOG",username,password);
strcpy(buffer,(LPSTR)(LPCTSTR)str1);
int ret;
ret=send(tcpSocket,buffer,strlen(buffer),0);
if (ret==0)
{
ret=send(tcpSocket,buffer,strlen(buffer),0);
MessageBox("server error",NULL,MB_OK);
}
//怎么才能让程序在这就知道是否通过了验证?
}
else if (nResponse == IDCANCEL)
{}
}
void CICClientDlg::RecvData()//用来进行数据接收
还有一个注册模块,我如何才能知道在点注册后我在主窗体中的接受函数中有通过注册而发回来的信息?
问题点数:100、回复次数:10Top
1 楼worldcup()回复于 2004-04-04 11:49:47 得分 0
由于是异步socket,你在OnReceive()中接收就行了,比如通过了验证server发回'y',否则发回'n'
或者在你想确认验证结果的地方调用recv()进行接收Top
2 楼sboom(+-LingCh-+)(爱美人不爱VC)回复于 2004-04-04 11:55:52 得分 0
可以在弄个event,在send之后::WaitForSingleObject(...)限时N秒,如果这段时间能接收到返回的消息就setevent唤醒,通过接受到的消息就知道注册是不是成功了,如果N秒内没唤醒也会自动恢复线程,当做验证失败。Top
3 楼mengdizhaoyan(多一)回复于 2004-04-04 12:48:02 得分 0
比如注册,我点注册按钮后如何来实现检测在主窗体中收到的数据?用计时器?我对VC和SOCKET都不是很熟,请大家解释得详细点Top
4 楼nous()回复于 2004-04-05 08:16:24 得分 0
怎么没人回答呀?Top
5 楼kiluar(kiluar)回复于 2004-04-05 09:33:23 得分 0
我开发过这种软件,我是模仿windows的消息驱动,自己设计的一套通信机制,OnReceive()的时候,我又模仿tcp/ip协议的机制,在返回的信息上加上一个包头,客户端要读取包头后判断服务器所返回的包头是什么消息,然后进行相应的处理。Top
6 楼nous()回复于 2004-04-05 12:58:21 得分 0
呵呵,通信我知道点,用异步模式,我是说如何才能在点注册后,我已把注册信息发往服务器端,而在主窗体那才收消息,我如何得知注册后的信息,比如成功或失败,还有注册后分配的号,然后显示在注册的这个窗体上!Top
7 楼kiluar(kiluar)回复于 2004-04-05 13:25:31 得分 0
这个当然是服务器Send()了信息过来之后,你在Client端用OnReceive()了服务端的信息后,这时候你可以根据情况做处理了,这时候你想把信息反馈给用户的话,你有n种方法选择:
1)用AfxMessageBox();
2)用Mode式Dialog
3)用无Mode式Diagog
4)你也可以在原注册窗口上选择
注意:其中2)-3)需要有原注册窗口的句柄(或指针)
...Top
8 楼nous()回复于 2004-04-05 14:40:46 得分 0
是啊,所以现在搞不出啊Top
9 楼lihao_ningxia(耗子)回复于 2004-04-05 14:42:33 得分 100
呵呵Top
10 楼lihao_ningxia(耗子)回复于 2004-04-05 14:42:59 得分 0
你把EMAIL发给我吧,我给你!Top




