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();
}

解决方案 »

  1.   

    楼主,你长连接要心跳包维持的,不然sock很容易自己结束的
      

  2.   

    如果m_socketRealConversationForCommon是成员变量,那么有如下可能:
    在你连接成功之后,OnButtonGetPic之前,你的某个地方关闭了m_socketRealConversationForCommon,或者是服务器主动关闭了对应的socket。如果不是服务器问题,那你的问题肯定出在SendMsg();和RecvMsg();里面。为什么你们总是要贴一些根本没有错误的代码,难道就真的没有对大致错误的地方有个粗略的判断?
    你所贴的代码,全是最基础的代码——创建套接字和连接服务端。难道你一直纠结于在这几行代码里面找错误,不理解。
    不是我说你,你自己看看你所贴出来的代码,再牛的人也找不到问题。
    这就是为什么没人回你,怎么回呢?就你这几行代码。关于网络编程的东西,我只看到socket和connect调用,怎么给你找到问题?
    所有回你的人,都是要去猜测你是怎么做的,还要跟你来个互动,比如要问你是怎么数据收发的啊,怎么个不可用啊,返回什么错误啊,太麻烦,所以大家都干脆不回你了。