📄 sever.cpp
字号:
#include "Def.h"
int severTask(int sock)
{
char szBuf[MAX_PACK_SIZE+1] = {'\0'};
int ret = 0;
while(true)
{
ret = recv(sock, szBuf, MAX_PACK_SIZE, 0);
if (ret == 0) // client close
break;
else if (ret == SOCKET_ERROR)
{
printf("taskID: %d, recv() failed\n", taskIdSelf());
break;
}
szBuf[ret] = '\0';
printf("RECV: '%s'\n", szBuf);
}
return 0;
}
extern "C" int sever()
{
int sListen,
sClient;
int iAddrSize;
int taskID;
struct sockaddr_in local,
client;
sListen = socket(AF_INET, SOCK_STREAM, 0);
if (sListen == SOCKET_ERROR)
{
printf("socket() failed\n");
return 1;
}
// Select the local interface and bind to it
//
local.sin_addr.s_addr = htonl(INADDR_ANY);
local.sin_family = AF_INET;
local.sin_port = htons(PORT);
if (bind(sListen, (struct sockaddr *)&local,
sizeof(local)) == SOCKET_ERROR)
{
printf("bind() failed\n" );
return 1;
}
listen(sListen, MAX_CONNECT);
//
// In a continous loop, wait for incoming clients. Once one
// is detected, create a thread and pass the handle off to it.
//
while (1)
{
iAddrSize = sizeof(client);
sClient = accept(sListen, (struct sockaddr *)&client, &iAddrSize);
if (sClient == INVALID_SOCKET)
{
printf("accept() failed: %d");
break;
}
printf("Accepted client: %s:%d\n",
inet_ntoa(client.sin_addr), ntohs(client.sin_port));
char szTaskName[32];
static int nTask = 0;
sprintf(szTaskName, "Client %d", nTask++);
taskID = taskSpawn(szTaskName, 100, 0, MEM_1M, (FUNCPTR)severTask, sClient, 2,3,4,5,6,7,8,9,10);
if (taskID == ERROR)
{
printf("Create task failed");
break;
}
}
close(sListen);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -