可算Windows完成端口服務器端最簡單的例子了,看看吧。
//服務器端在端口555上監聽,將連接發送來的訊息保存至cBuf數組中,然後關閉連接,退出程序。
#include
<
windows.h
>
#include < stdio.h >
#include < stdlib.h >
#pragma comment (lib, "WS2_32.lib")
#define DEFAULT_PORT 555
#define DEFAULT_BUFFER 8
int main( void ) ... {
//初始化
WSADATA wsd;
if(WSAStartup(MAKEWORD(2, 2), &wsd) != 0)...{
printf("WSAStartup error! ");
return FALSE;
}
printf("WSAStartup初始化成功! ");
SOCKET sSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if(sSocket == SOCKET_ERROR)...{
printf("SOCKET ERROR! ");
return FALSE;
}
printf("socket初始化成功! ");
struct sockaddr_in local;
local.sin_addr.s_addr = htonl(INADDR_ANY);
local.sin_family = AF_INET;
local.sin_port = htons(DEFAULT_PORT);
//綁定
if(bind(sSocket, (struct sockaddr *)&local, sizeof(local)) == SOCKET_ERROR)...{
printf("綁定失敗!bind error! ");
return FALSE;
}
printf("綁定成功! ");
//監聽
if(listen(sSocket, 10) == SOCKET_ERROR)...{
printf("監聽失敗!listen error! ");
return FALSE;
}
printf("監聽成功! ");
printf("開始監聽... ");
int naddrlen = sizeof(struct sockaddr_in);
//創建完成端口
HANDLE hIocp;
hIocp = CreateIoCompletionPort(INVALID_HANDLE_VALUE,
NULL, 0, 0);
if (hIocp == NULL)...{
printf("完成端口創建失敗! ");
return FALSE;
}
printf("完成端口創建成功! ");
//套接字與完成端口關聯
if(CreateIoCompletionPort((HANDLE)sSocket,
hIocp, (ULONG)0, (ULONG)0) == NULL)...{
printf("完成端口綁定失敗! ");
}
printf("完成端口成功綁定! ");
//接受連接
SOCKET sClient = accept(sSocket, (struct sockaddr *)&local, (int *)&naddrlen);
if(sClient == SOCKET_ERROR)...{
printf("接受連接失敗!accept error! ");
return FALSE;
}
printf("接受連接成功! ");
HANDLE hWorkThread = CreateThread(NULL, 0, WorkThread, (void*)sClient, 0, &dwTreadId);
CloseHandle(hWorkThread);
char cBuf[DEFAULT_BUFFER] = ...{'
#include < stdio.h >
#include < stdlib.h >
#pragma comment (lib, "WS2_32.lib")
#define DEFAULT_PORT 555
#define DEFAULT_BUFFER 8
int main( void ) ... {
//初始化
WSADATA wsd;
if(WSAStartup(MAKEWORD(2, 2), &wsd) != 0)...{
printf("WSAStartup error! ");
return FALSE;
}
printf("WSAStartup初始化成功! ");
SOCKET sSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if(sSocket == SOCKET_ERROR)...{
printf("SOCKET ERROR! ");
return FALSE;
}
printf("socket初始化成功! ");
struct sockaddr_in local;
local.sin_addr.s_addr = htonl(INADDR_ANY);
local.sin_family = AF_INET;
local.sin_port = htons(DEFAULT_PORT);
//綁定
if(bind(sSocket, (struct sockaddr *)&local, sizeof(local)) == SOCKET_ERROR)...{
printf("綁定失敗!bind error! ");
return FALSE;
}
printf("綁定成功! ");
//監聽
if(listen(sSocket, 10) == SOCKET_ERROR)...{
printf("監聽失敗!listen error! ");
return FALSE;
}
printf("監聽成功! ");
printf("開始監聽... ");
int naddrlen = sizeof(struct sockaddr_in);
//創建完成端口
HANDLE hIocp;
hIocp = CreateIoCompletionPort(INVALID_HANDLE_VALUE,
NULL, 0, 0);
if (hIocp == NULL)...{
printf("完成端口創建失敗! ");
return FALSE;
}
printf("完成端口創建成功! ");
//套接字與完成端口關聯
if(CreateIoCompletionPort((HANDLE)sSocket,
hIocp, (ULONG)0, (ULONG)0) == NULL)...{
printf("完成端口綁定失敗! ");
}
printf("完成端口成功綁定! ");
//接受連接
SOCKET sClient = accept(sSocket, (struct sockaddr *)&local, (int *)&naddrlen);
if(sClient == SOCKET_ERROR)...{
printf("接受連接失敗!accept error! ");
return FALSE;
}
printf("接受連接成功! ");
HANDLE hWorkThread = CreateThread(NULL, 0, WorkThread, (void*)sClient, 0, &dwTreadId);
CloseHandle(hWorkThread);
char cBuf[DEFAULT_BUFFER] = ...{'
客戶端可以先telnet上去看看,比如運行
telnet 127.0.0.1 555
看看發生了什麽~~
(其客戶端參見“視窗:網路-(完成端口)-最簡示例(客戶端) ”)