C++ socket TCP开发基本流程

WSAStartup 加载windows sockets动态库。
WSACleanup  释放套接字资源。

Example:

1 WSADATA wsd; //WSADATA变量(指向LPWSADATA结构的指针,
2 //返回被加载的动态库的有关信息)
3 WSAStartup(MAKEWORD(2,2), &wsd)
4 WSACleanup();//释放套接字资源;


服务端流程
1 SOCKET sServer; //服务器套接字
2  SOCKET sClient; //客户端套接字
3  SOCKADDR_IN addrServ;; //服务器地址
4 //创建套接字
5 sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
6 //服务器套接字地址
7 addrServ.sin_family = AF_INET;
8 addrServ.sin_port = htons(4999);
9 addrServ.sin_addr.s_addr = INADDR_ANY;
10 //绑定套接字
11 retVal = bind(sServer, (LPSOCKADDR)&addrServ, sizeof(SOCKADDR_IN));
12 //开始监听
13 retVal = listen(sServer, 1);
14 //接受客户端请求
15 sockaddr_in addrClient;
16 int addrClientlen = sizeof(addrClient);
17 sClient = accept(sServer,(sockaddr FAR*)&addrClient, &addrClientlen);
18 //接收客户端数据
19 ZeroMemory(buf, BUF_SZIE);
20 retVal = recv(sClient, buf, BUF_SZIE, 0);
21 //退出
22 closesocket(sServer); //关闭套接字
23 closesocket(sClient); //关闭套接字
24 WSACleanup(); //释放套接字资源;

客户端流程

1 WSADATA wsd; //WSADATA变量
2 SOCKET sHost; //服务器套接字
3 SOCKADDR_IN servAddr; //服务器地址
4 WSAStartup(MAKEWORD(2,2), &wsd)
5 sHost = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
6 //设置服务器地址
7 servAddr.sin_family =AF_INET;//地址家族
8 servAddr.sin_addr.s_addr = inet_addr("127.0.0.1");//IP地址
9 servAddr.sin_port = htons((short)4999);//服务端口号
10 int nServAddlen = sizeof(servAddr);//填充该结构的大小
11
12 //连接服务器
13 retVal=connect(sHost,(LPSOCKADDR)&servAddr, sizeof(servAddr));
14
15 //向服务器发送数据
16 ZeroMemory(buf, BUF_SZIE);
17 strcpy(buf, "MyTCP");
18 retVal = send(sHost, buf, strlen(buf), 0);
19
20 //退出
21 closesocket(sHost); //关闭套接字
22 WSACleanup(); //释放套接字资源

说明:
     listen(SOCKET s,int backlog)函数的第二个参数为最大等待连接数。
     假如backlog参数为3时,如果有4个客户端同时向服务器发出请求,则前3个连接会被放到等待处理的队列中,
                                     而第4个则会造成WSAECONNREFUSED错误。
                                     当服务器接收一个客户端请求时,这个请求就会从队列删除。
posted @ 2011-05-09 15:46  吾爱易逝  阅读(7540)  评论(0编辑  收藏  举报