[转帖]VC开发 基于Winsock API的VC网络编程实战 -客户端socket的操作_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3620 | 回复: 0   主题: [转帖]VC开发 基于Winsock API的VC网络编程实战 -客户端socket的操作        下一篇 
ulee@land
注册用户
等级:上尉
经验:769
发帖:55
精华:1
注册:2012-12-17
状态:离线
发送短消息息给ulee@land 加好友    发送短消息息给ulee@land 发消息
发表于: IP:您无权察看 2012-12-18 10:28:38 | [全部帖] [楼主帖] 楼主

VC开发基于Winsock APIVC网络编程实战 -----客户端Socket的操作北京联动北方科技有限公司

    1、建立客户端的Socket

    客户端应用程序首先也是调用WSAStartup()函数来与Winsock的动态连接库建立关系,然后同样调用socket()来建立一个TCPUDP socket(相同协定的sockets才能相通,TCPTCPUDPUDP)。与服务器端的socket不同的是,客户端的socket可以调用bind()函数,由自己来指定IP地址及port号码;但是也可以不调用 bind(),而由 Winsock来自动设定IP地址及port号码。

    2、提出连接申请

    客户端的Socket使用connect()函数来提出与服务器端的Socket建立连接的申请,函数调用成功返回0,否则返回SOCKET_ERROR

int PASCAL FAR connect( SOCKET s, const struct sockaddr FAR *name, int namelen );


  参数:sSocket 的识别码;

    nameSocket想要连接的对方地址;

    namelenname的长度;

    数据的传送

    虽然基于TCP/IP连接协议(流套接字)的服务是设计客户机/服务器应用程序时的主流标准,但有些服务也是可以通过无连接协议(数据报套接字)提供的。先介绍一下TCP socket UDP socket在传送数据时的特性:Stream (TCP) Socket提供双向、可靠、有次序、不重复的资料传送。Datagram(UDP) Socket虽然提供双向的通信,但没有可靠、有次序、不重复的保证,所以UDP传送数据可能会收到无次序、重复的资料,甚至资料在传输过程中出现遗漏。由于UDP Socket 在传送资料时,并不保证资料能完整地送达对方,所以绝大多数应用程序都是采用TCP处理Socket,以保证资料的正确性。一般情况下TCP Socket 的数据发送和接收是调用send() recv() 这两个函数来达成,而 UDP Socket则是用sendto() recvfrom() 这两个函数,这两个函数调用成功发挥发送或接收的资料的长度,否则返回SOCKET_ERROR

int PASCAL FAR send( SOCKET s, const char FAR *buf,int len, int flags );


  参数:sSocket 的识别码

    buf:存放要传送的资料的暂存区

    len buf:的长度

    flags:此函数被调用的方式

    对于Datagram Socket而言,若是 datagram 的大小超过限制,则将不会送出任何资料,并会传回错误值。对Stream Socket 言,Blocking 模式下,若是传送系统内的储存空间不够存放这些要传送的资料,send()将会被block住,直到资料送完为止;如果该Socket被设定为 Non-Blocking 模式,那么将视目前的output buffer空间有多少,就送出多少资料,并不会被 block 住。flags 的值可设为 0 MSG_DONTROUTE MSG_OOB 的组合。

int PASCAL FAR recv( SOCKET s, char FAR *buf, int len, int flags );


  参数:sSocket 的识别码

    buf:存放接收到的资料的暂存区

    len buf:的长度

    flags:此函数被调用的方式

    对Stream Socket 言,我们可以接收到目前input buffer内有效的资料,但其数量不超过len的大小。

    本实例在WinSocket API知识的基础上,定义了一个基于网络的类CNetworking ,并利用该类实现了网络通信的基本功能,消息数据的传送,具体请参见代码部分。

    二、编程步骤

    1、启动Visual C++6.0,生成一个Win32 exe应用程序,将该程序命名为"CNetWorking"

    2、定义CNetWorking类,由于篇幅原因,具体实现参见代码部分,这里不给出其实现源代码;

    3、设计程序的对话框和菜单(参见代码部分);

    4、添加代码,编译运行程序。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论