求助 一个关于socket的问题?

ahui535320611 2012-09-11 05:57:17
在同一个类的一个函数中初始化创建了一个socket(客户端) 并且CONNECT()连接了服务器端 这个函数成功了 然后我在另一个函数(统一各类)中使用同一个socket时 这次却调用不成功 上次创建好的socket 值就成乱码了?
...全文
156 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahui535320611 2012-09-12
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20120912/09/3eff386d-0c4d-489d-9c07-9898798c9d74.html?49761
ahui535320611 2012-09-12
  • 打赏
  • 举报
回复
结贴了 这个帖子不知道出什么问题了 大家的回复都不显示 而且还同时出现了两个相同的帖子 我重新发帖 大家还过来棒棒忙 分照给
youngwolf 2012-09-12
  • 打赏
  • 举报
回复
如果m_socketRealConversationForCommon是成员变量,只有两个原因:
一,在ConnectServer()之后,SendMsg()之前,它被关闭了。
二,SendMsg()在ConnectServer()之前调用了。

socket是一个句柄,你怎么看出它是乱码来的?
gameslq 2012-09-12
  • 打赏
  • 举报
回复
应该没问题,贴一些对类CClientKZDDlg 变量的使用代码
ahui535320611 2012-09-12
  • 打赏
  • 举报
回复
不应该超出了吧 都是在一个类里边的 套接字一旦建立成功 并且客户端与服务器连接成功后 这个套接字是不是一直存在 并且值是不变的[Quote=引用 3 楼 的回复:]

在函数中创建的?超过作用域了吧...
[/Quote]
ahui535320611 2012-09-12
  • 打赏
  • 举报
回复
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);
}[Quote=引用 2 楼 的回复:]

connect()失败,请WSAGetLastError()检查失败的原因。
另外上面说的上次创建好的socket 值就成乱码了?什么意思?指的是recv接收的数据是乱码?你怎么recv接受的?发送到发送的没有问题?
[/Quote]
ahui535320611 2012-09-12
  • 打赏
  • 举报
回复
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);
}[Quote=引用 2 楼 的回复:]

connect()失败,请WSAGetLastError()检查失败的原因。
另外上面说的上次创建好的socket 值就成乱码了?什么意思?指的是recv接收的数据是乱码?你怎么recv接受的?发送到发送的没有问题?
[/Quote]
ahui535320611 2012-09-12
  • 打赏
  • 举报
回复
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);
}[Quote=引用 2 楼 的回复:]

connect()失败,请WSAGetLastError()检查失败的原因。
另外上面说的上次创建好的socket 值就成乱码了?什么意思?指的是recv接收的数据是乱码?你怎么recv接受的?发送到发送的没有问题?
[/Quote]
linlingyu 2012-09-11
  • 打赏
  • 举报
回复
在函数中创建的?超过作用域了吧...
Eleven 2012-09-11
  • 打赏
  • 举报
回复
connect()失败,请WSAGetLastError()检查失败的原因。
另外上面说的上次创建好的socket 值就成乱码了?什么意思?指的是recv接收的数据是乱码?你怎么recv接受的?发送到发送的没有问题?
miniget001dotcom 2012-09-11
  • 打赏
  • 举报
回复
什么成了乱码?如果在socket上操作失败,调用WSAGetLastError获取错误码看看什么原因

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧