25页

作者在 2008-12-18 10:11:19 发布以下内容

实例来对各章的基本概念进行解释, 因此必须具备必要的网络编程知识。

在平时工作中, 为了查找安全漏洞, 也需要编写一些短小精悍的程序来代替复杂的手

工命令输入。首先对Linux 中的网络编程作介绍, Linux 对网络通信提供了很好地支持。

由于Windows 系统目前很流行, 特别是开发环境VisualC +, 所以, 后面也对Windows 环境

下的网络编程作了介绍。

我们可以认为套接字是将Unix 系统的文件操作推广到提供点对点的通信。如果要

操作文件, 应用程序会根据应用程序的需要为之创建一个套接字。操作系统返回一个正

数。应用程序通过引用这个正数来使用这个套接字。文件描述符和套接字描述符的不同

点在于, 在程序调用open( ), 操作系统将一个文件描述符绑定到一个文件或设备, 但在

创建一个套接字时, 可以不将它绑定到一个目标地址。程序可以在任何想要用这个套接

字的时候指定目标地址。

在点对点的通信程序中, 我们将请求服务或数据的程序叫做客户端程序, 提供数据或

服务的软件叫做服务器程序。

对于使用无连接协议的服务器程序和客户端程序的流程, 客户端程序并不和服务器

程序建立连接, 它是通过使用服务器地址作为参数的sendto( )系统调用, 发送一个数据报

给服务器的。同样, 服务器并不接受客户端的连接, 而是用recvfrom( ) 调用等待从客户端

发来的数据。

4 .3 .8 WinSock 网络编程

这里简要介绍一下用WinSock 创建TCP 流套接字程序。

socket ( ) 函数打开一个流套接字。用AF - INET 指定地址格式参数, SOCK -

STREAM 指定类型参数。

if ( ( WinSocket = socket ( AF - INET , SOCK - STREAM, 0 ) ) = = INVALID -

SOCKET)

{

wsprintf ( szEr ror , TEXT(Allocating socket failed . Error : %d) ,

WSAGetLastEr ror ( ) ) ;

MessageBox ( NULL, szError , TEXT (Error) , MB- OK) ;

return FALSE;

}

socket ( )函数打开一个套接字时, 这个套接字没有名字, 仅仅在一个地址家族名字

空间里分配了一个描述符。为了让客户端将套接字区分开来, 一个TCP 流套接字服务器

程序必须命名它的套接字。但不必用bind( )函数命名客户端的套接字。

一个套接字的名字在TCP/ TP 协议里由三部分组成: 协议名称, 主机地址和一个表征应

用程序的端口数字。这些地址域sin - family, sin - addr , sin - port 都是SOCKADDR- IN 结构的

成员。必须在调用bind( )之前初始化SOCKADDR- IN 结构。

一个程序应该在程序结束前, 关闭所有打开的程序, 以便将套接字资源返回给操作系

统。对于TCP 流套接字, 当一个套接字连接结束后, 服务器关闭了由accept ( ) 创建的套

一本好书 | 阅读 2984 次
文章评论,共0条
游客请输入验证码
浏览141043次
文章归档