c++ socket编程的疑问

zjtzlqr 2013-07-07 02:32:19
socket类
class mclient{
private:
SOCKET sock;
sockaddr_in saddr;
int len;
char buf[4096];
public:
mclient()
{
sock=socket(AF_INET,SOCK_STREAM,0);
len=sizeof(saddr);
}

bool mconnect(char* addr,int port){
saddr.sin_family=AF_INET;
saddr.sin_port=htons(port);
saddr.sin_addr.s_addr=inet_addr(addr);
if(connect(sock,(struct sockaddr*)&saddr,len)==SOCKET_ERROR)
{
return false;
}
else
{
return true;
}
}

void close(){
closesocket(sock);
}

void msend(const char* mes,int length)
{
send(sock,mes,length,0);
}

bool receive(int flag){
memset(buf,0,4096);
if(recv(sock,buf,4096,0)==SOCKET_ERROR){
return false;
}
else
{
return true;
}
}
};





连接目标板的函数1
void Connect_Target_Board(void)
{
mclient a;
if(a.mconnect(bIpAddr,dwPort))
{
ConnectStatus = 1;
}
else
{
ConnectStatus = 0;
}
}


连接目标板的函数2
mclient a;
void Connect_Target_Board(void)
{

if(a.mconnect(bIpAddr,dwPort))
{
ConnectStatus = 1;
}
else
{
ConnectStatus = 0;
}
}


为什么函数1能够正常连接目标板,而函数2却不能连接目标板,只不过将类变量a弄成一个全局变量而已

...全文
114 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjtzlqr 2013-07-07
  • 打赏
  • 举报
回复
我是用的vs2005开发的是窗体应用程序。 main函数是这样 int main(array<System::String ^> ^args) { WSADATA wsaData; if (WSAStartup(MAKEWORD(2,1),&wsaData)) { printf("Winsock initializing fail\n"); WSACleanup(); } // 在创建任何控件之前启用 Windows XP 可视化效果 Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); // 创建主窗口并运行它 Application::Run(gcnew Form1()); return 0; }
Geoff08Zhang 2013-07-07
  • 打赏
  • 举报
回复
这有很多socket源码,你可以参考一下: http://download.csdn.net/detail/geoff08zhang/4571358
zjtzlqr 2013-07-07
  • 打赏
  • 举报
回复
调用a.mconnect(bIpAddr,dwPort);
zjtzlqr 2013-07-07
  • 打赏
  • 举报
回复
void send_data(void) { int i; char TxBuf[4000]; mclient a; a.mconnect(bIpAddr,dwPort); for(i=0; i<4000; i++) { TxBuf[i] = i % 255; } a.msend(TxBuf,4000); a.receive(1); */ } 现在的情况是每次我想发送数据都要调用这个
zjtzlqr 2013-07-07
  • 打赏
  • 举报
回复
那要怎么处理呢, 我想只连接一次就发数据 ,而不是每次发数据都要调用mconnect
www_adintr_com 2013-07-07
  • 打赏
  • 举报
回复
你在构造函数里面创建 socket, 第二个全局变量初始化还在 main 之前, 创建 socket 也在 main 之前, 此时你还没运行过 WSAStartup 或其他类似的初始化函数吧. 所以创建 socket 的时候可能就已经失败了. 但是你又没有对创建 socket 做检查.
网上很多地方可以找到本书的下载,我唯一能够额外贡献的是,提供多格式的打包下载,包括:PDF格式,离线网页格式,在线网页格式。 如果您觉得下载比较麻烦,那么建议您直接使用在线教程,网址是:http://learn.akae.cn/media/index.html 如果您只需要一个可以打印的PDF格式文件,那么建议你下载Defonds的资源,因为我的PDF格式文件就是从他那下的,资源链接是:http://download.csdn.net/detail/defonds/2855361 如果您和我一样,希望在多种环境下都可以方便地使用本书,那么欢迎您下载我提供的这个打包资源! 对本书的描述 版权 © 2008, 2009 宋劲杉, 北京亚嵌教育研究中心 这本书最初是为北京亚嵌教育研究中心的嵌入式Linux系统工程师就业班课程量身定做的教材之一,作者宋劲松。 这是一本从零基础开始学习编程的书,不要求读者有任何编程经验,但读者应勤于思考。本书尽最大努力理清概念之间的依赖关系,力求一站式学习,读者不需要为了找一个概念的定义去翻其它书,也不需要为了搞清楚一个概念在本书中前后一通乱翻,只需从前到后按顺序学习即可。但一站式学习并不等于傻瓜式学习,有些章节有一定的难度,需要积极思考才能领会。本书可以替你节省时间,但不能替你思考,不要指望像看小说一样走马观花看一遍就能学会。 本书不是孤立地讲C语言,而是和编译原理、操作系统、计算机体系结构结合起来讲。或者说,本书的内容只是以C语言为载体,真正讲的是计算机的原理和程序的原理。 强调基本概念和基本原理,在编排顺序上非常重视概念之间的依赖关系,每次引入一个新的概念,只依赖于前面章节已经讲过的概念,而绝不会依赖后面章节要讲的概念。有些地方为了叙述得完整,也会引用后面要讲的内容,比如说“有关XX我们到XX章再仔细讲解”,凡是这种引用都不是必要的依赖,可以当它不存在,只管继续往下看就行了。 这本书定位在入门级,虽然内容很多,但不是一本百科全书,除了C语言基本要讲透之外其它内容都不深入,书中列出了很多参考资料,是读者进一步学习的起点。K&R的第一章是一个Whirlwind Tour,把全书的内容简单过了一遍,然后再逐个深入进去讲解。本书也可以看作是计算机专业课程体系的一个Whirlwind Tour,学习完本书之后有了一个全局观,再去学习那些参考资料就应该很容易上手了。 本书的主要内容包括三大部分: C语言入门。介绍基本的C语法,帮助没有任何编程经验的读者理解什么是程序,怎么写程序,培养程序员的思维习惯,找到编程的感觉。前半部分改编自《How To Think Like A Computer Scientist: Learning with C++》(Allen B. Downey.) C语言本质。结合计算机和操作系统的原理讲解C程序是怎么编译、链接、运行的,同时全面介绍C的语法。位运算的章节改编自亚嵌教育林小竹老师的讲义,链表和二叉树的章节改编自亚嵌教育朱老师的讲义。汇编语言的章节改编自《Programming from the Ground Up: An Introduction to Programming using Linux Assembly Language》(Jonathan Bartlett.)在该书的最后一章提到,学习编程有两种Approach,一种是Bottom Up,一种是Top Down,各有优缺点,需要两者结合起来。所以作者编这本书的思路是,第一部分Top Down,第二部分Bottom Up,第三部分可以算填了中间的空隙,三部分全都围绕C语言展开。 Linux系统编程。介绍各种Linux系统函数和内核的工作原理。Socket编程的章节改编自亚嵌教育卫剑钒老师的讲义。 为什么要在Linux平台上学C语言?用Windows学C语言不好吗? 用Windows还真的是学不好C语言。C语言是一种面向底层的编程语言,要写好C程序,必须对操作系统的工作原理非常清楚,因为操作系统也是用C写的,我们用C写应用程序直接使用操作系统提供的接口。既然你选择了看这本书,你一定了解:Linux是一种开源的操作系统,你有任何疑问都可以从源代码和文档中找到答案,即使你看不懂源代码,也找不到文档,也很容易找个高手教你,各种邮件列表、新闻组和论坛上从来都不缺乐于助人的高手;而Windows是一种封闭的操作系统,除了微软的员工别人都看不到它的源代码,只能通过文档去猜测它的工作原理,更糟糕的是,微软向来喜欢藏着揶着,好用的功能留着自己用,而不会写到文档里公开。本书的第一部分在Linux或Windows平台上学习都可以,但第二部分和第三部分介绍了很多Linux操作系统的原理以帮助读者更深入地理解C语言,只能在Linux平台上学习。 Windows平台上的开发工具往往和各种集成开发环境(IDE,Integrated Development Environment)绑在一起,例如Visual Studio、Eclipse等。使用IDE确实很便捷,但IDE对于初学者绝对不是好东西。微软喜欢宣扬傻瓜式编程的理念,告诉你用鼠标拖几个控件,然后点一个按钮就可以编译出程序来,但是真正有用的程序有哪个是这么拖出来的?很多从Windows平台入门学编程的人,编了好几年程序,还是只知道编完程序点一个按钮就可以跑了,把几个源文件拖到一个项目里就可以编译到一起了,如果有更复杂的需求他们就傻眼了,因为他们脑子里只有按钮、菜单的概念,根本没有编译器、链接器、Makefile的概念,甚至连命令行都没用过,然而这些都是初学编程就应该建立起来的基本概念。另一方面,编译器、链接器和C语言的语法有密切的关系,不了解编译器、链接器的工作原理,也不可能真正掌握C的语法。所以,IDE并没有帮助你学习,而是阻碍了你学习,本来要学好C编程只要把语法和编译命令学会就行了,现在有了IDE,除了学会语法和编译命令,你还得弄清楚编译命令和IDE是怎么集成的,这才算学明白了,本来就很复杂的学习任务被IDE搞得更加复杂了。Linux用户的使用习惯从来都是以敲命令为主,以鼠标操作为辅,从学编程的第一天起就要敲命令编译程序,等到你把这些基本概念都搞清楚了,你觉得哪个IDE好用你再去用,不过到那时候你可能会更喜欢vi或emacs而不是IDE了。

65,209

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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