⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.h

📁 网页抓取程序
💻 H
字号:

void CreateHandleConnectionThread(struct sHandleConnection* struct_connection)
{

#ifdef WIN32
	_beginthreadex(NULL,0,HandleConnection,(void*)struct_connection,0,NULL);
#else
int errorCode;
pthread_t ptTmp;
    if( (errorCode=pthread_create(&ptTmp, NULL, HandleConnection, (void*)struct_connection)) != 0 )
    {
            printf("\r\nThread error (%i):\r\n",errorCode);
            perror(" -    pthread_create() ");
            exit(0);
    }
#endif

}

/*OWS Server*/
int ListenToPort(int port, SOCKET* fd)
{
	SOCKADDR_IN saddr;
	
	*fd=socket(AF_INET,SOCK_STREAM,0);
#ifdef WIN32
	if (*fd==INVALID_SOCKET)
#else
		if (*fd<0)
#endif
			return -1;
		
		saddr.sin_family = AF_INET;
		saddr.sin_addr.s_addr= htonl(INADDR_ANY);
		saddr.sin_port = htons((unsigned short int)port);
		
		if (bind(*fd, (LPSOCKADDR) &saddr, sizeof(saddr)) == SOCKET_ERROR)
			return -2;
		
		if (listen(*fd,100) == SOCKET_ERROR)
			return -3;
		
		return 1;
}

int StartOWSServer(unsigned int port)
{
	int ret;
	struct sHandleConnection* struct_connection;
	SOCKADDR_IN owsServer_client_addr;
	int sin_size;
    SOCKET  OWS_Server_fd;
    SOCKET  OWS_Server_fd_conn;
	
	sin_size=sizeof(SOCKADDR_IN);
	
	ret = ListenToPort((int)port, &OWS_Server_fd);
	
	switch(ret)
	{
	case -1:
		printf("\r\n\r\nOpenWebSpider Server: socket() error\r\n\r\n");
        return 0;
		break;
	case -2:
		printf("\r\n\r\nOpenWebSpider Server: bind() error\r\n\r\n");
        return 0;
		break;
	case -3:
		printf("\r\n\r\nOpenWebSpider Server: listen() error\r\n\r\n");
        return 0;
		break;
	case 1:
		/* wait for a connection */
		while(1)
		{
			OWS_Server_fd_conn=accept(OWS_Server_fd, (struct sockaddr *)&owsServer_client_addr, &sin_size);

            if(glQuit==1)
                break;
			
#ifdef WIN32
			if (OWS_Server_fd_conn==INVALID_SOCKET)
#else
				if (OWS_Server_fd_conn<0)
#endif
					continue;
				
	

				//memory is freed in the function HandleConnection()
				struct_connection = malloc(sizeof(struct sHandleConnection));
				
				struct_connection->sock = OWS_Server_fd_conn;
				memcpy(&struct_connection->client,&owsServer_client_addr, sizeof(SOCKADDR_IN));
				CreateHandleConnectionThread(struct_connection);
		}
		
		closesocket(OWS_Server_fd);
		
		return 0;
	}
	
	closesocket(OWS_Server_fd);

return 0;
}

#ifdef WIN32
unsigned __stdcall 
#else
void* 
#endif
HandleConnection(void* connection)
{
SOCKET sock = ((struct sHandleConnection*)connection)->sock;
char query[MAXQUERYSIZE];
char origQuery[MAXQUERYSIZE];
char search_query[MAXQUERYSIZE];
char bufIn[2];
unsigned int queryArray[MAXWORDSxQUERY];
unsigned int query_elements;
int x,i;
int rec;
DWORD gtc;
RANKS* rankRes;
char* res;
int connOK;
int sortResults;
int fromBinaryQuery;
char* pp, *pp2;
int lLimit, rLimit;
int freeQuerySlot;
int numResults;
int *msg;
char *text_query;

    connOK = 1;

	while(connOK)
    {
        if(glQuit==1)
            break;

        memset(query,0,MAXQUERYSIZE);
        memset(queryArray,0,MAXWORDSxQUERY);

        rec=1;
        x=0;
        query_elements = 0;
		fromBinaryQuery = 0;

		search_query[0] = 0;

	    while(rec)
        {
            /* se la query 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -