小弟初学网络编程,现有一段代码:
void CMainDlg::OnButton1() //表示对话框上一按钮按下
{
if(m_socketClient){//在这里,怎样判断已经连上了?
MessageBox("connect aready");
return;
} if(m_socketClient.Connect("10.184.1.114",1052))
MessageBox("connect success");
else
MessageBox("connect failed");
}程序运行,第一次按下按钮,程序提示连接成功,而第二次,则是连接失败。我想在连接成功后,第二次按按钮时提示已经连接。
void CMainDlg::OnButton1() //表示对话框上一按钮按下
{
if(m_socketClient){//在这里,怎样判断已经连上了?
MessageBox("connect aready");
return;
} if(m_socketClient.Connect("10.184.1.114",1052))
MessageBox("connect success");
else
MessageBox("connect failed");
}程序运行,第一次按下按钮,程序提示连接成功,而第二次,则是连接失败。我想在连接成功后,第二次按按钮时提示已经连接。
Call this member function to determine if a blocking call is in progress.BOOL IsBlocking( );
Return Value
Nonzero if the socket is blocking; otherwise 0.
Contains the SOCKET handle for the socket encapsulated by this CAsyncSocket object.SOCKET m_hSocket;
我加上
if(m_socketClient.IsBlocking()){
MessageBox("aready connected");
return;
}
后,发现不管怎样,IsBlocking总是为FALSE;是否还有其它设置?
UINT port;
m_socketClient.GetSockName(ip,port)
if(ip == "0.0.0.0")
还没有连接,
else
连接
CString ip;
UINT port;
m_socketClient.GetSockName(ip,port)
这个port的值总是为1657,不知何故,而我在服务器端设的端口不是1657。分不够我可再开帖子。
在CSocket.create()的时候,输入你要绑定端口,
比如100000,则GetSockName(ip,port)
后port为100000.
如果没有输入,则为随机绑定的断口。端口在这里
你不用管!
m_socketServer.Create(1052);
我在客户端连接成功后,我想得到服务器端的接口,就是得到那个1052?
tcp协议,想得到服务器的端口,是已知的,就是你调用connect()
函数的时候其中的参数,所以对你来说服务器端的端口你是已知,
如果是udp的话,不用connect(),直接调用SendTo()发送数据,
对方可以根据接收到的数据包可以得到发送方的ip和端口,而tcp的服务器端口是已知的!