社区
网络编程
帖子详情
求助 一个关于socket的问题?
ahui535320611
2012-09-11 05:57:17
在同一个类的一个函数中初始化创建了一个socket(客户端) 并且CONNECT()连接了服务器端 这个函数成功了 然后我在另一个函数(统一各类)中使用同一个socket时 这次却调用不成功 上次创建好的socket 值就成乱码了?
...全文
157
11
打赏
收藏
求助 一个关于socket的问题?
在同一个类的一个函数中初始化创建了一个socket(客户端) 并且CONNECT()连接了服务器端 这个函数成功了 然后我在另一个函数(统一各类)中使用同一个socket时 这次却调用不成功 上次创建好的socket 值就成乱码了?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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获取错误码看看什么原因
TCP服务器(
socket
)
服务器以及客户端程序,不知道为什么连接不上~
求助
~请大家帮忙看一下
问题
出在了哪里,谢谢~
手机Email 可发附件 带联系人列表
发上来是来
求助
的:在sun和nokia的模拟器上能正常发邮件,但是到了手机上就显示不能解析主机名(could not resolve hostname),查了下应该是执行SMTPClient里open()函数的时候抛出的异常,应该是
socket
连smtp服务器的时候连不上。但是。。这个在手机上查错太艰难了。。我正在想办法能方便点调试。。各路大神有木有遇到过这种情况或者有什么想法的麻烦留言给点提示。不胜感激!在电脑上可以发带附件的邮件。发图片啦文本啦肯定是木有
问题
的~自带简单的联系人列表方便填写收件人
Socket
编程快速入门
本课程将理本课程将理啊 论结合实践,带你从零开始,系统学习
Socket
编程技术,让
Socket
的学习不再那么零散与难以掌握,同时会提炼出
Socket
网络传输的核心思想与构架,并带你踩坑出坑,增加你的分析与处理
问题
的啊aas...
DNS实验报告.pdf
DNS 服务器程序 实验报告 系统和运行环境描述 Windows7 操作系统平台,VS2010 编程环境。 使用 C/C++编写 dns 中继服务器。 系统功能设计 设计 DNS 服务器程序,读入 域名-IP 地址 对照表,当客户端查询域名对应的 IP 地址时,用域名检索该对照表,有三种检索结果: (1)检索结果为 ip 地址 0.0.0.0,则向客户端返回 域名不存在 的报错消息 (不良网站拦截功能) (2)检索结果为普通 IP 地址,则向客户返回这个地址(服务器功能) (3)表中未检到该域名,则向因特网 DNS 服务器发出查询,并将结果返给客户 端(中继功能) 。 需要考虑的
问题
: (1)多客户端并发 允许多个客户端(可能会位于不同的多个计算机)的并发查询,即:允许第
一个
查询尚未得到答案前就启动处理另外
一个
客户端查询请求(DNS 协议头中 ID 字 段的作用) 超时处理 (2)由于 UDP 的不可靠性,考虑
求助
外部 DNS 服务器(中继)却不能得到应答 或者收到迟到应答的情形。 主要数据结构 主要的全局的数据结构定义在 dns.h 的头文件中。 struct req_inform{ struct sockaddr_in cli_addr; unsigned short id; };//id和 cli_addr 唯一标识
一个
DNS请求 该结构唯一标示了
一个
来自客户端的 dns 请求。 map
url_ip_table; 用来构建本地存储的 url_ip_table.txt 中域名和 IP 的映射。 map
req_cache[cache_num]; 这
一个
map 映射,把客户端 dns 请求映射到
一个
unsigned short 上面,用它来 存储 id 转换表。另外和 id 转换表相关的参数是如下: #define cache_num 3 #define cache_size 1000 int cur_cache=0; int idThen_max=cache_num*cache_size; int idThen=0; cache_num 指定了 id 转换表的个数,cache_size 是每个 id 转换表的大小, cur_cache 指向是当前正在装入的 id 转换表, idThen 是
一个
从 0 到 0xFFFF 一直 循环的被映射到的 id 号。 这个设计的作用是代替了时间戳,而且可以根据实际情况来指定 id 转换表缓存 的大小。 具体流程是: 生成 id 转换的 item(idThen,struct req_inform 的
一个
变量) 把 id 转换的 item 加入到 req_cache[cur_cache]中 如果 req_cache[cur_cache]已经达到 cache_size{ cur_cache 指向下
一个
id 转换表,并将其清空 } idThen 加 1 具体实现在 dns_fuc.cpp 的 ask_next_server 函数中。 int sockfd; struct sockaddr_in ser_addr,nser_addr; sockfd 是
一个
绑定到 ser_addr(dns 服务器本机 53 号端口)的
一个
socket
描述 符,用它来进行 udp 报文传输。 ser_addr 初始化为本地 53 号端口的地址, nser_addr 是上级服务器的 53 号端口 (中继功能时使用) 。 const char * nx_ip="211.68.71.4";//保存上级服务器的 ip const char * file_name="C:/Users/Administrator/Desktop/dns/dns/url_ip_table.txt"; //保存 url_ip_table.txt 的路径 struct dns_ans_add{ unsigned short url_pointer; unsigned short type; unsigned short clas_s; unsigned short time1; unsigned short time2; unsigned short sourse_size; unsigned int sourse; }; 这个是与 dns 请求相比 dns 响应追加部分。 模块划分 int get_url_ip_table( map
& table); 用来从文件中读入 url_ip_table。 int init(); 用来初始化 ser_addr、nser_addr、sockfd,以及对 sockfd 绑定
安卓实验报告(聊天室应用)
实验三 基于Android的聊天网络应用 安卓开发实验及其报告(基于Android的聊天网络应用) 懂你所懂,有你所求,这是安卓实验报告,源码可以去看看我的主页,可以直接免费下载查看源码哦! 1. 教学目标 了解安卓应用市场发布流程;掌握Android网络编程。 2. 教学内容 类QQ的及时聊天;实现用户注册、文本、语音、图片的信息交换;实现单聊;实现群聊;可考虑增加创新内容如发布文章、短视频、
求助
、直播等。 3. 教学方法 实验上机。 4. 本章重点 安卓应用市场发布流程;Android网络编程。 5. 本章难点 安卓应用市场发布流程;Android网络编程。 二、实验目的 1、了解安卓应用的发布流程,掌握Android网络编程。 2、了解及掌握Android+
Socket
即时通讯应用技术。 3、对安卓开发流程有深入的了解。
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章