sever.cpp

来自「About communication in Vxworks system」· C++ 代码 · 共 81 行

CPP
81
字号
#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 + =
减小字号Ctrl + -
显示快捷键?