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

📄 network.c

📁 一个基于SAX分析方法的XML文档解析函数包
💻 C
字号:
#include "NetWork.h"
#include <winsock.h>
#pragma comment(lib,"Ws2_32.lib")
#include <string.h>
#include <stdio.h>

int TempXMLFileCreate(char *p) 
{ 
	FILE *fp=fopen("XMlFile.tmp","a+");
	if(!fp) return 0; 
	fprintf(fp,"%s",p); 
	fclose(fp); 
	return 1;
} 

void ClearFile(char* fileName)
{
	FILE *fp=fopen(fileName,"w"); 	 
	fclose(fp);	
}

int HttpFileGet(char* IPAdr, unsigned short port, char* file) 
{	
	WSADATA ws; 
	SOCKET s; 
	struct sockaddr_in addr; 

	int iResult; 
	long lResult; 
	char strSubAddr[100], strBuffer[100]; 

	lResult = WSAStartup(0x0101,&ws); 
	s = socket(AF_INET,SOCK_STREAM,0); 

	addr.sin_family = AF_INET; 
	addr.sin_port = htons(port); 
	addr.sin_addr.s_addr = inet_addr(IPAdr); //
	iResult=connect(s,(struct sockaddr *)&addr, sizeof(addr)); 
	if(SOCKET_ERROR == iResult){ 
// 连接失败 
	WSACleanup(); 
	return FALSE; 
	}else { 
// 连接成功 
		strcpy(strSubAddr,file); 
 
		iResult = send(s, strSubAddr,strlen(strSubAddr),0); 

		ClearFile("XMlFile.tmp");
// 下载文件 
		do { 
			strset(strBuffer, '\0'); 

			iResult = recv(s,strBuffer,sizeof(strBuffer),0); 
			if(!TempXMLFileCreate(strBuffer)) return 0; 
		} while( iResult !=0 ); 
		} 

		WSACleanup(); 
		return TRUE; 
} 

int HttpAnalysisUrl(const char* url, char* ipAdr, unsigned short* port, char* fileName)
{			
	char	tmp[MAX_PATH];
	int		i			= 0;
	int		j			= 0;

	*port		= 80;

	for(;url[i] < '0'||url[i]>'9'; i++)
		if(i>MAX_PATH-1) return 0;

	for(; url[i] != '/'&&url[i] != ':'; i++){
		ipAdr[j] = url[i];
		j++;
		if(i>MAX_PATH-1) return 0;
	}
	
	ipAdr[j] = '\0';

	j = 0;

	if(url[i] == ':'){
		i++;
		for(;url[i] != '/';i++){
			tmp[j] = url[i];
			j++;
		}
		tmp[j] = '\0';
		for(j = 0;tmp[j] != '\0'; j++)
			*port = 10*(*port) + tmp[j] - '0';
	}
	
	j = 0;
	for(;url[i] != '\0';i++, j++){
		fileName[j] = url[i];
		if(i>MAX_PATH-1) return 0;
	}
	fileName[j] = '\0';
   
	strcpy(tmp, "GET ");
	strcat(tmp, fileName);
	strcpy(fileName, tmp);
	strcat(fileName, " \r\n");

	return 1;
}

int HttpConnEstablish(char* IPAdr, unsigned short port, char* file, SOCKET* s) 
{	
	WSADATA ws;	 
	struct sockaddr_in addr; 	 
	char strSubAddr[100];
	int lResult, iResult;

	lResult = WSAStartup(0x0101,&ws); 
	*s = socket(AF_INET,SOCK_STREAM,0); 

	addr.sin_family = AF_INET; 
	addr.sin_port = htons(port); 
	addr.sin_addr.s_addr = inet_addr(IPAdr); //
	iResult=connect(*s,(struct sockaddr *)&addr, sizeof(addr)); 	
	if(SOCKET_ERROR == iResult){ 
		WSACleanup(); 
		return 0; 
	}else{
		strcpy(strSubAddr,file); 
		send(*s, strSubAddr,strlen(strSubAddr),0);
	} 
	return 1;
}

int HttpConnEstablishByUrl(char* url, SOCKET* s)
{
	char IPAdr[MAX_PATH];
	unsigned short port = 80;
	char file[MAX_PATH];

	if(!HttpAnalysisUrl(url, IPAdr, &port, file)) return 0;
	return HttpConnEstablish(IPAdr, port, file, s);
}

void HttpConnCleanUp(){
	WSACleanup();
}

int HttpStreamGet(unsigned int s, char* strBuffer, int len)
{
//	strset(strBuffer, '\0');
	return recv(s,strBuffer,len,0);
}

⌨️ 快捷键说明

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