设为首页 加入收藏

TOP

1.2.1 流式套接字编程(1)
2013-10-07 15:51:33 来源: 作者: 【 】 浏览:87
Tags:1.2.1 流式 套接字 编程

1.2  获取网络中计算机的IP地址和计算机名

在开发网络应用的过程中,经常需要获取网络中某台计算机的IP地址和计算机名称。在本节的内容中,将介绍如何使用Visual C++(www.cppentry.com) 6.0开发一个实现上述功能的应用程序。

1.2.1  流式套接字编程(www.cppentry.com)(1)

网络数据的传输是通过套接字实现的。套接字有3种类型:流式套接字(SOCK_ STREAM),数据报套接字(SOCK_DGRAM)及原始套接字(RAW)。在本小节的内容中,将首先讲解流式套接字编程(www.cppentry.com)的基本知识。

流式套接字是面向连接的,提供双向、有序、无重复且无记录边界的数据流服务,适用于处理大量数据,可靠性高,但开销也大,编程(www.cppentry.com)模型如图1-11所示。

 
(点击查看大图)图1-11  流式套接字编程(www.cppentry.com)模型

1.服务器端编程(www.cppentry.com)步骤

(1) 在初始化阶段调用函数WSAStartup()

此函数在应用程序中初始化Windows Sockets DLL,只有此函数调用成功后,应用程序才可以再调用其他Windows Sockets DLL中的API函数。

在程序中该函数的调用形式如下:

  1. int WSAStartup(  
  2. WORD wVersionRequested,     //所使用WinSocket版本  
  3. LPWSADATA lpWSAData         //存储系统返回的WinSocket信息  
  4. ); 

(2) 建立Socket

初始化WinSock的动态链接库后,需要在服务器端建立一个监听Socket,为此可以调用socket()函数来建立这个监听的Socket,并定义此Socket所使用的通信协议:

  1. SOCKET socket(  
  2. int af,                 //目前只提供PF_INET(AF_INET)  
  3. int t   ype,                    //Socket的类型(SOCK_STREAM、SOCK_DGRAM)  
  4. int protocol                //通讯协议(如果使用者不指定则设为0)  
  5. ); 

调用成功返回Socket对象,失败则返回INVALID_SOCKET(调用WSAGetLastError()可得知原因,所有WinSocket的函数都可以使用这个函数来获取失败的原因)。

如果要建立的是遵从TCP/IP协议的Socket,第二个参数type应为SOCK_STREAM,如为UDP(用户数据报协议)的Socket,type应为SOCK_DGRAM。

(3) 绑定端口

接下来要为服务器端定义的监听Socket指定一个地址及端口(Port),这样客户端才知道待会儿要连接哪一个地址的哪个端口,为此我们要调用bind()函数,该函数调用成功返回0,否则返回SOCKET_ERROR:

  1. int bind(  
  2. SOCKET s,                   //Socket对象名  
  3. const struct sockaddr FAR *name,    //Socket的地址值,即所在机器的IP地址  
  4. int namelen             //name的长度  
  5. ); 

如果使用者不在意地址或端口的值,那么可以设定地址为INADDR_ANY,及Port为0,Windows Sockets会自动将其设定为适当的地址及Port(1024到5000之间的值)。此后可以调用getsockname()函数来获知其被设定的值。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.1.4 小试牛刀--编程实现获取MAC.. 下一篇1.2.1 流式套接字编程(2)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)
·SQL CREATE INDEX 语 (2025-12-25 01:21:45)
·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)