关于 socket的问题 (还是那个帖子)
bool CClientKZDDlg::ConnectServer(CString strIP)
{
WORD wVersionRequested = MAKEWORD(2,0);
WSADATA wsaData;
int nErr;
//调用WSAStartup()
nErr = WSAStartup(wVersionRequested, &wsaData);
if(nErr != 0)
{
MessageBox("调用WSAStarup()出错");
return false;
}
//调用socket()
m_socketRealConversationForCommon = socket(AF_INET, SOCK_STREAM, 0);
if(m_socketRealConversationForCommon == INVALID_SOCKET)
{
MessageBox("调用socket()出错");
return false;
}
//调用connect()
//初始化服务器地址
m_strServerIP = strIP;
m_sockaddrServer.sin_family = AF_INET;
m_sockaddrServer.sin_addr.s_addr = inet_addr(m_strServerIP);
m_sockaddrServer.sin_port = htons(6578);
//连接服务器
nErr = connect(m_socketRealConversationForCommon, (sockaddr *)&m_sockaddrServer, sizeof(m_sockaddrServer));
if(nErr != 0)
{
MessageBox("调用connect()出错");
return false;
}
RecvMsg();
return true;
}
m_socketRealConversationForCommon在这个函数中初始化创建的 然后此函数结束后我在下边的函数使用这个socket时 值就变了 怎么能让在调用下边的函数时 也是刚创建的值 我看别人的程序就可以实现(他是封装了一个类里边 我不想另外加一个类) 自己却做不来 谢谢
void CClientKZDDlg::SendMsg()
{
send(m_socketRealConversationForCommon, m_strMsg, m_strMsg.GetLength(), 0);
}
这个程序要用到m_socketRealConversationForCommon两大次 一次是建立连接时 客户端connect服务器 成功后 服务器向客户端发送成功信息 此时用到Connect()中的Recv()当然Recv()中也用到m_socketRealConversationForCommon 这次是能够正常通讯的 第二次使用是在点击获取图像时 就是下边的程序 这次调用SendMsg()和RecvMsg()时m_socketRealConversationForCommon就不可用了 我跟踪的m_socketRealConversationForCommon的值 在未建立连接时值为345216845 建立连接后变成1724
void CClientKZDDlg::OnButtonGetPic()
{
// TODO: Add your control notification handler code here
m_strMsg = "VIDEO|";
SendMsg();
//接收服务器的反馈信息
RecvMsg();
}
[解决办法]
楼主,你长连接要心跳包维持的,不然sock很容易自己结束的
[解决办法]