예제 #1
0
파일: proxy2.c 프로젝트: zhiliang729/ctest
int main(int argc, char *argv[])
{
    	int nListenSock = -1, nLocalSock = -1, nRemoteSock = -1;
	pid_t nChild;	    	
	if (argc != 2) 							/* 命令行参数:“proxy1 本地端口” */
	{
    		PrintLog(stdout, "proxy1 LOCALPORT\n");
    		return 1;
    	}
    	/* ---------------------------父进程------------------------------- */
    											/* ① 创建侦听套接字 */
    	ASSERT(CreateSock(&nListenSock, atoi(argv[1]), 8) == 0);	
    	PrintLog(stdout, "listen service: service is activated.");
    	InitServer();							/* ② 进程转后台运行 */
  	while (1)
   	{
     										/* ③ 等待并创建连接套接字 */
    		if (!VERIFY(AcceptSock(&nLocalSock, nListenSock) == 0)) 	
				continue;					/* ③ 继续等待 */
		VERIFY((nChild = fork()) >= 0);		/* ④ 创建子进程 */
		if (nChild == 0) break;				/* 子进程跳转到子进程代码 */
		close(nLocalSock);					/* ⑤ 父进程关闭连接套接字 */
	}
	/* ---------------------------子进程------------------------------- */
	close(nListenSock);						/* ⑦ 子进程关闭侦听套接字 */
								/* 解析HTTP报文头,并与目标服务器建立连接 */
	if (HttpConnect(nLocalSock, &nRemoteSock) == 0)
		SendReciveServer(nLocalSock, nRemoteSock);			/* 通信转发 */
    	if (nLocalSock >= 0) close(nLocalSock);  /* ⑨ 子进程关闭本地端套接字 */
    	if (nRemoteSock >= 0) close(nRemoteSock);/* ⑨ 子进程关闭目标端套接字 */
}
예제 #2
0
파일: http6.c 프로젝트: zhiliang729/ctest
int main()
{
	int nSock, nSock1;
	pid_t nChild;	
	char buf[2048], szAddr[30];
	memset(buf, 0, sizeof(buf));
	ASSERT(CreateSock(&nSock, 9001, 9) == 0);
	while(1)
	{
		ASSERT(AcceptSock(&nSock1, nSock) == 0);
		nChild = fork();
		if (nChild == 0) 
		{
			break;
		}
		close(nSock1);
	}
	close(nSock);
	memset(szAddr, 0, sizeof(szAddr));
	LocateRemoteAddr(nSock1, szAddr);
	recv(nSock1, buf, sizeof(buf), 0);
	PrintLog(stderr, buf);
	sprintf(buf, "HTTP/1.1 200 OK\n%s%s%s", szHtml1, szAddr, szHtml2);
	send(nSock1, buf, strlen(buf), 0);
	PrintLog(stderr, buf);
	close(nSock1);
}	
예제 #3
0
int main()
{
	int nSock,nSock1;
	char buf[2048];
	//创建端口号为9001的侦听套接字
	VERIFY(CreateSock(&nSock,9001,9) != 0, "Create Listen SOCKET");
	//接收客户端连接申请,创建连接套接字nSock1
	VERIFY(AcceptSock(&nSock1,nSock) != 0,"Link");

	memset(buf,0,sizeof(buf));

	//接收客户端发送的TCP数据消息
	recv(nSock1,buf,sizeof(buf),0);
	fprintf(stderr,buf);
	close(nSock);   //关闭侦听套接字
	close(nSock1);  //关闭连接套接字
	return 0;
}