`
abs200311235
  • 浏览: 122527 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在VC下使用标准的socket函数编程的步骤

阅读更多
在VC下使用标准的socket函数编程的步骤
    socket是一种在Linux或者Unix下非常流行的网络编程方式,这种方式简单有效,可以很灵活的完成各种复杂的协议控制,个人感觉比使用MFC下的网络相关类库要来的更舒服一些,因为所有一切都是自己可控的。
但是使用socket编程有一个非常不方便的地方在于,由于在Linux下没有一个像VC这样强大的调试平台,网络通信过程中的错误追踪就会显得稍微复杂一些。无奈,只能尝试在VC下是否可以使用标准的socket函数来完成网络通信,借助VC强大的调试工具来达到高效率的编码目的。
在网上找了一些资料,看来VC下使用标准socket函数也不是很困难,遂将过程记录,以便后用~~
第一步,使用VC的winsock.h头文件,代替Linux下的socket相关的头文件。
第二步,为VC的工程链接winsock的库文件ws2_32.lib
以上两步可以通过下面的代码实现:
   1: #ifdef _WIN32
   2: #include <winsock.h>
   3: #pragma comment(lib, "ws2_32.lib")
   4: #else
   5: #include <sys/socket.h>
   6: #include <netinet/in.h>
   7: #include <arpa/in.h>
   8: #endif
第三步,在使用任何sochet函数之前,首先使用WSAStartup函数初始化winsock,在退出应用程序前,使用WSACleanup函数清理winsock。可以使用下面的代码实现:
   1: WORD wVersionRequested;
   2: WSADATA wsaData;
   3: int err;
   4: wVersionRequested = MAKEWORD( 1, 1 );
   5: // init winsock before using socket functions
   6: err = WSAStartup( wVersionRequested, &wsaData );
   7: if ( err != 0 ) {
   8:     return 0;
   9: }
  10: // check winsock version
  11: if ( LOBYTE( wsaData.wVersion ) != 1 ||
  12:     HIBYTE( wsaData.wVersion ) != 1 ) {
  13:     WSACleanup( );
  14:     return 0;
  15: }
  16:
  17: // use socket function here
  18:
  19: // clean up winsock before exit
  20: WSACleanup();
OK,经过上面的三步处理,就可以在程序中使用标准socket函数完成网络通信了!
最后给出一个简单的范例:
   1: #include <stdio.h>
   2: #include <stdlib.h>
   3:
   4: #ifdef _WIN32
   5: #include <winsock.h>
   6: #pragma comment(lib, "ws2_32.lib")
   7: #else
   8: #include <sys/socket.h>
   9: #include <netinet/in.h>
  10: #include <arpa/in.h>
  11: #endif
  12:
  13: int main(int argc, char *argv[])
  14: {
  15:     int err;
  16:     SOCKET sockClient;
  17:     SOCKADDR_IN addrSrv;
  18:     char recvBuf[50];
  19:
  20: #ifdef _WIN32
  21:     WORD wVersionRequested;
  22:     WSADATA wsaData;
  23:     wVersionRequested = MAKEWORD( 1, 1 );
  24:
  25:     err = WSAStartup( wVersionRequested, &wsaData );
  26:     if ( err != 0 ) {
  27:         return 0;
  28:     }
  29:
  30:     if ( LOBYTE( wsaData.wVersion ) != 1 ||
  31:         HIBYTE( wsaData.wVersion ) != 1 ) {
  32:         WSACleanup( );
  33:         return 0;
  34:     }
  35: #endif
  36:
  37:     sockClient=socket(AF_INET,SOCK_STREAM,0);
  38:
  39:     addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
  40:     addrSrv.sin_family=AF_INET;
  41:     addrSrv.sin_port=htons(6000);
  42:     connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
  43:     send(sockClient,"hello",strlen("hello")+1,0);
  44:     recv(sockClient,recvBuf,50,0);
  45:     printf("%s\n",recvBuf);
  46:
  47: #ifdef _WIN32
  48:     closesocket(sockClient);
  49:     WSACleanup();
  50: #endif
  51:     return 0;
  52: }
http://hi.baidu.com/hiroada/blog/item/9ece37d6083a32d5a044df7e.html
分享到:
评论

相关推荐

    实验三Socket通信实验报告.doc

    点对点通信功能 实现网络点对点通讯程序的关键步骤就是实现信息在网络中的发送和接收。数据接收 使用的是Socket,数据发送使用的是NetworkStream。 1.1利用Socket来接收信息 TcpListener tlListen1 = new Tcp...

    vc++ 应用源码包_6

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    基于TCP的网络聊天室

    CSocket的编程步骤:(注意我们一定要在创建MFC程序第二步的时候选上Windows Socket选项,其中ServerSocket是服务器端用到的,ClientSocket是客户端用的。) (1)构造CSocket对象,如下例: CSocket ServerSocket;...

    基于WinPcap的网络扫描以及端口扫描流量统计毕业设计

    3.1 socket(套接字)编程原理 17 3.2套接字函数的分析 18 3.3 SOCKET端口扫描的程序思想 20 3.4基于SOCKET程序扫描的实现 20 4. 总结 21 5.参考文献 22 6.附录 23 收到此文件后,请按如下步骤安装 1.安装支持...

    基于TCP的网络聊天室的设计

    CSocket的编程步骤:(注意我们一定要在创建MFC程序第二步的时候选上Windows Socket选项,其中ServerSocket是服务器端用到的,ClientSocket是客户端用的。) (1)构造CSocket对象,如下例: CSocket ServerSocket;...

    MFC教程入门知识全集.rar

    说明:本书稿为张孝祥、袁龙友两位老师在2000 年依据张孝祥的vc 讲课记录整理,由于时间关系,仅仅是写成了草稿,欢迎大家使用! 第1 章 掌握C 1.1 类的定义与应用 1.1.1 结构的定义 1.1.2 类的定义 1.1.2.1 ...

    vc++ 应用源码包_1

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_5

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_2

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_3

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 开发实例源码包

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    PT80-NEAT开发指南v1.1

    使用 NEAT 工程向导建立应用程序 ........................................................................................................ 5 编译及运行程序(模拟器下) ......................................

    java源码包2

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包---java 源码 大量 实例

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包3

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包4

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目源代码

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有...

Global site tag (gtag.js) - Google Analytics