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();
}
{
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();
}
解决方案 »
- 求解:入库成功另外一个表中数据却没有改变
- 程序在vista+vs2008编译后运行正常,但在win7+vs2010编译后无法运行
- 如何在view类的PreCreateWindow函数中获得设备上下文CDC*指针
- Windows XP Sp2 tcp 问题
- 求图书配套光盘中数据库封装类文件ado.h和ado.cpp
- 英文系统下,如何将汉字从richedit中读取和写入显示?
- 怎么把ShockWaveFlash控件上发生的鼠标右键捕获,并替换成鼠标左键事件?
- 对于servlet类找不到的问题,请列位大侠会诊
- vc6.0与matlab混编,基于com组件的的数据传递问题
- 作一个比较专业的vcd多媒体播放器.
- #define DBCLIK WM_USER + 101,为什么在代码中使用DBCLIK显示未定义,已包含相关头文件
- 点击任务栏里的最小窗口后 能弹出一个提示 再还原 不是托盘
在你连接成功之后,OnButtonGetPic之前,你的某个地方关闭了m_socketRealConversationForCommon,或者是服务器主动关闭了对应的socket。如果不是服务器问题,那你的问题肯定出在SendMsg();和RecvMsg();里面。为什么你们总是要贴一些根本没有错误的代码,难道就真的没有对大致错误的地方有个粗略的判断?
你所贴的代码,全是最基础的代码——创建套接字和连接服务端。难道你一直纠结于在这几行代码里面找错误,不理解。
不是我说你,你自己看看你所贴出来的代码,再牛的人也找不到问题。
这就是为什么没人回你,怎么回呢?就你这几行代码。关于网络编程的东西,我只看到socket和connect调用,怎么给你找到问题?
所有回你的人,都是要去猜测你是怎么做的,还要跟你来个互动,比如要问你是怎么数据收发的啊,怎么个不可用啊,返回什么错误啊,太麻烦,所以大家都干脆不回你了。