原理:网络上两个终端之间的通信采用的是套接字,基本的套接字通信都可以通过创建套接字,绑定到端口,监听,连接,发送和接收数据完成。
在Windows下进行winsock编程,需要用WSAStartup()指明Windows Sockets API的版本号及获得特定Windows Sockets实现的细节,并且在程序结束时用WSACleanup()释放对应的资源。
一个基本的winsock应用框架代码如下。
需加入Ws2_32.lib库才能编译运行。
代码:
- #include <stdlib.h>
-
#include <windows.h>
-
#include <stdio.h>
-
#include <winsock2.h>
-
-
-
int main(int argc, char** argv) {
-
-
WSADATA wsaData;
-
if((Ret = WSAStartup(MAKEWORD(2,2),&wsaData))!=0){
-
printf("WSAStartup failed with error%d\n",Ret);
-
return 1;
-
}
-
/*本函数必须是应用程序或DLL调用的第一个Windows Sockets函数.
-
-
它允许应用程序或DLL指明Windows Sockets API的版本号及获得特
-
-
定Windows Sockets实现的细节.应用程序或DLL只能在一次成功的
-
-
WSAStartup()调用之后才能调用进一步的Windows Sockets API函数.*/
-
-
//**********************************
-
-
此处加入应用程序的代码。
-
-
-
-
//**********************************
-
-
if(WSACleanup()==SOCKET_ERROR){
-
printf("WSACleanup failed with error %d\n",WSAGetLastError());
-
return 1;
-
-
}
-
/*
-
应用程序或DLL在使用Windows Sockets服务之前必须要进行一次成功的WSAStartup()调用.当它完成了Windows Sockets的使用后,应用程序或DLL必须调用WSACleanup()将其从Windows Sockets的实现中注销,并且该实现释放为应用程序或DLL分配的任何资源.任何打开的并已建立连接的SOCK_STREAM类型套接口在调用 WSACleanup()时会重置; 而已经由closesocket()关闭却仍有要发送的悬而未决数据的套接口则不会受影响- 该数据仍要发送.
-
对应于一个任务进行的每一次WSAStartup()调用,必须有一个WSACleanup()调用.只有最后的WSACleanup()做实际的清除工作;前面的调用仅仅将Windows Sockets DLL中的内置引用计数递减.一个简单的应用程序为确保WSACleanup()调用了足够的次数,可以在一个循环中不断调用WSACleanup()直至返回WSANOTINITIALISED.
-
-
*/
-
-
return 0;
-
-
}
阅读(1960) | 评论(3) | 转发(0) |