WIN32 Socket API
来源:互联网 发布:js 获取元素父节点 编辑:程序博客网 时间:2024/05/02 01:25
在Windows网络编程中,套接字接口主要有三种类型:
1.stream socket (流式套接字)
2.datagram socket (数据套接字)
3.raw socket (原始套接字)
<一> 初始化函数
int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);
<二> 创建套接字函数
SOCKET socket(int af, int type, int protocol);
[参数]
af - 地址家族(通常使用:AF_INET)
type - socket的种类:
SOCK_STREAM : 用于TCP协议
SOCK_DGRAM : 用于UDP协议
protocol - 所使用的协议
[返回值]
当函数成功调用时返回一个新的SOCKET(Socket Descriptor)
失败时返回INVALID_SOCKET.
<三> 定义套接字后,需要为其指定本机地址,协议,和端口
bind()函数将套接字绑定到一个已知的地址上,函数原型如下:
int bind(SOCKET s,const struct sockaddr FAR *name,int namelen);
[参数]
s - 指向用Socket函数生成的Socket Descriptor
addr - 指向Socket地址的指针
namelen - 该地址的长度.
[返回值]
当函数成功调用时返回0
调用失败时返回 SOCKET_ERROR
<四> 当服务器端的socket对象绑定后,必须建立一个监听的队列来接收客户端的连接请求。
调用listen()函数是服务器端的socket进入监听状态,并设定可以建立的最大连接数,
目前最大值限定为5,最小1,函数原型如下:
int listen(SOCKET s,int backlog);
<五> connect()函数用于发送一个连接请求,函数原型如下:
int connect(SOCKET s,const struct sockaddr FAR *name,int namelen);
[参数]
s - 指向用Socket函数生成的Socket Descriptor
name - 指向服务器地址的指针
namelen - 该地址的长度.
[返回值]
当函数成功调用时返回0
调用失败时返回 SOCKET_ERROR
<六> 当客户端提出连接请求时,服务器端要调用accept()函数接受客户端的连接请求。函数
原型如下:
SOCKET PASCAL FAR accept(SCOKET s,struct sockaddr FAR *addr,int FAR *addrlen);
<七> 无论客户端还是服务器应用程序都用send()函数来向TCP连接的另一端发送数据。原型如下:
int PASCAL FAR send(SOCKET s,const char FAR *buf,int len,int flags);
不论客户端还是服务器应用程序都用recv()函数从TCP连接的另一端接收数据。原型如下:
int PASCAL FAR recv(SOCKET s,char FAR *buf,int len,int flags);
<八> 应用程序在使用完套接字以后,需要将其关闭,并释放相关资源。closesocket()函数用于关
毕一个描述符为s套接字,并释放分配给该套接字的资源,如果s涉及一个正在进行的连接则
该连接被释放。原型如下:
BOOL closesocket(SOCKET s);
<九> 应用程序在使用完socket库后,要调用WSACleanup()hanshu来解除与socket库的绑定并且
释放socket库所占用的系统资源。函数原型如下:
int WSACleanup(void);
注:pascal就是__stdcall,参数从右向左压栈,并由函数自己清空堆栈 Win3.x的FAR宏在Win32
里面无效。Win32里面都是32位的寄存器,没有FAR和NEAR之分,PASCAL和WINAPI,CALLBACK,
APIENTRY 一样,都是指参数的传递方式为__stdcall,而Ansi C默认的参数传递方式为__cdecl,
这些宏定义在windef.h里面。FAR 以前定义成far, 是指跨 segment 的存取,x86 在 virtual
mode 下 已无 segment 这个东西,所以 FAR 在32 bits VC的定义是空的。 PASCAL 早期定义是
pascal 是指函式左边的引数先於右边引数先传(push to stack)并且函式返回时stack的平衡由
函式来做(C标准是由 呼叫者平衡)。 这是早期 Winodws为了节省记忆体所使用的calling
convention。 现在VC应已不支援pascal呼叫方式。 APIENTRY是定义给一个 thread 的 entry的,
它的定义一直都是 和 WINAPI,而WINAPI 的定义是 FAR PASCAL,而FAR PASCAL 已作废。
- WIN32 Socket API
- Win32 API 之 socket网络编程
- Socket 学习之 WIN32-API(1):简单通信
- Win32 API
- win32 api
- win32 api
- Win32 API
- Win32 API
- Win32 API
- win32 api
- win32 socket编程帮助
- win32 socket connect timeout
- win32 socket 文档地址
- WIN32 socket编程
- Win32 Socket编程注意事项
- Win32 socket简单实例
- Win32 Socket select模型
- Win32 SOCKET之UDP
- java call oracle procudure setBoolean问题PLS-00306: wrong number or types of arguments in call to
- public static String utf8Byte2String
- 推荐几本书
- ShellExecute与ShellExecuteEx的用法
- WinFrom中实现点击关闭按钮窗口在靠屏幕左边中间缓缓收缩
- WIN32 Socket API
- hdu1233最小生成树
- public static void longToAscString
- 计算机视觉及多媒体相关conference&journal评级
- android访问远程数据库
- POJ-2823-Sliding Window
- POJ搜索题目汇总
- 敏捷开发价值观和原则
- const ,static 和 volatile