套接字学习2

来源:互联网 发布:中国商品进口额数据 编辑:程序博客网 时间:2024/05/17 08:48

/*每天记住一个套接字函数 */

SOCKET socket(int domain , int type , int protocol);

1.对于 domain 这个参数,指的是socket的协议簇有很多种类型 AF_INET,PF_INET,,等等。其实本质是一个以定义的整数! 对于TCP/IP 一般采用 AF_INET作为参数

2.对于type这个参数,也有多种类型,流式套接字(SOCK_STREAM)数据报套接字(SOCK_DGRAM)以及原始套接字(RAW SOCKET)

3.对于参数 protocol,则代表的是一种特殊的协议,不晓得具体是什么东西(以待深究)一般使用是默认为 "0" 

4.对于每个socket()会返回一整型的套字的描述符,如果值为-1 说明创建失败(if(sockfd==-1)){puts("falut");return 0;}

ps: SOCKET 其实就是一个64位的整形!

SOCKET socket (         int domain;   //协议簇 AF_INET        int type;        //套接字类型        int protocol;  //默认为 0 )

对于套接字创建好了之后通常要关闭套接字,就像前面所学的WSAStartup() 函数一样要用 WSACleanup() 关闭,同理 ,套接字也要 调用函数( closesocket(sockfd) )关闭!

int  closesocket(SOCKET sockfd);  BTW:这个函数简单明了也容易记忆,没什么好多说的!

具体实践:

#include < iostream >#include < cstdio   >#include <winsock2.h>using namespace  std;#pragma comment (lib,"ws2_32.lib")int main (){int root;SOCKET sockfd;WSADATA wData;WORD wVersionRequested;wVersionRequested=MAKEWORD(2,2);root=WSAStartup(wVersionRequested,&wData);if(root!=0) {puts("创建失败");return 0;}if(LOBYTE(wData.wVersion)!=2 || HIBYTE(wData.wVersion)!=2){WSACleanup();puts("版本号错误");return 0;}//初始化之后sockfd=socket(AF_INET,SOCK_STREAM,0);if(sockfd == -1) {puts("创建套接字失败");return 0;}WSACleanup();closesocket(sockfd);return 0;}


 

原创粉丝点击