C 语言编程---socket 基础
2008-07-16 10:22 文章来源:http://hi.baidu.com/sdghgk
先说套接字,网络编程必不可少的东西.先看下面吧,这可是经典哦!
最初 socket 是为支持 TCP/IP 协议而开发的,现在它已被认为是开发非 RPC Windows 网络应用程序的最好途
径。
socket 作为 BDS UNIX 的进程通信机制,是进行程序间通讯(IPC)的 BSD 方法,这意味着 socket 用来让一个进程
和其他的进程互通信息。
所谓 socket 通常也称作"套接字",用于描述 IP 地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"
向网络发出请求或者应答网络请求。
服务器,使用 ServerSocket 监听指定的端口,端口可以随意指定(由于 1024 以下的端口通常属于保留端口,
在一些操作系统中不可以随意使用,所以建议使用大于 1024 的端口),等待客户连接请求,客户连接后,会
话产生;在完成会话后,关闭连接。
客户端,使用 Socket 对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完
成后,关闭 Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个 1024 以上的端口。
本文所谈到的 Socket 函数如果没有特别说明,都是指的 Windows Socket API。
一、WSAStartup 函数
int WSAStartup(
WORD wVersionRequested,
LPWSADATA lpWSAData
使用 Socket 的程序在使用 Socket 之前必须调用 WSAStartup 函数。该函数的第一个参数指明程序请求使用的
Socket 版本,其中高位字节指明副版本、低位字节指明主版本;操作系统利用第二个参数返回请求的 Socket
的版本信息。当一个应用程序调用 WSAStartup 函数时,操作系统根据请求的 Socket 版本来搜索相应的 Socket
库,然后绑定找到的 Socket 库到该应用程序中。以后应用程序就可以调用所请求的 Socket 库中的其它 Socket
函数了。该函数执行成功后返回 0。
例:假如一个程序要使用 2.1 版本的 Socket,那么程序代码如下
wVersionRequested = MAKEWORD( 2, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
二、WSACleanup 函数
int WSACleanup (void);
应用程序在完成对请求的 Socket 库的使用后,要调用 WSACleanup 函数来解除与 Socket 库的绑定并且释放
Socket 库所占用的系统资源。
三、socket 函数
SOCKET socket(
int af,
int type,
int protocol
);
应用程序调用 socket 函数来创建一个能够进行网络通信的套接字。第一个参数指定应用程序使用的通信协议
的协议族,对于 TCP/IP 协议族,该参数置 PF_INET;第二个参数指定要创建的套接字类型,流套接字类型为
SOCK_STREAM、数据报套接字类型为 SOCK_DGRAM;第三个参数指定应用程序所使用的通信协议。该函数如
果调用成功就返回新创建的套接字的描述符,如果失败就返回 INVALID_SOCKET。套接字描述符是一个整数类
型的值。每个进程的进程空间里都有一个套接字描述符表,该表中存放着套接字描述符和套接字数据结构的对