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

📄 phpwatch.c

📁 又一款WEB游戏原代码Bk_Sources_RPG?忠豢頦EB游戏原代码Bk_Sources_RPG
💻 C
字号:
/******************************************************************************\* adapted from...for php 3** simples.c - Simple TCP/UDP server using Winsock 1.1*       This is a part of the Microsoft Source Code Samples.*       Copyright (C) 1996 Microsoft Corporation.*       All rights reserved.*       This source code is only intended as a supplement to*       Microsoft Development Tools and/or WinHelp documentation.*       See these sources for detailed information regarding the*       Microsoft samples programs.\******************************************************************************//* $Id: phpwatch.c,v 1.3 1998/12/28 09:34:52 sas Exp $ */#define WIN32_LEAN_AND_MEAN#include <winsock2.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#define DEFAULT_PORT 7869#define DEFAULT_PROTO SOCK_STREAM // TCPvoid Usage(char *progname) {	fprintf(stderr,"Usage\n%s -p [protocol] -e [endpoint] -i [interface]\n",		progname);	fprintf(stderr,"Where:\n\tprotocol is one of TCP or UDP\n");	fprintf(stderr,"\tendpoint is the port to listen on\n");	fprintf(stderr,"\tinterface is the ipaddr (in dotted decimal notation)");	fprintf(stderr," to bind to\n");	fprintf(stderr,"Defaults are TCP,7869 and INADDR_ANY\n");	WSACleanup();	exit(1);}int main(int argc, char **argv) {	char Buffer[128];	char *interface= NULL;	unsigned short port=DEFAULT_PORT;	int retval;	int fromlen;	int i;	int socket_type = DEFAULT_PROTO;	struct sockaddr_in local, from;	WSADATA wsaData;	SOCKET listen_socket, msgsock;	/* Parse arguments */	if (argc >1) {		for(i=1;i <argc;i++) {			if ( (argv[i][0] == '-') || (argv[i][0] == '/') ) {				switch(tolower(argv[i][1])) {					case 'p':						if (!stricmp(argv[i+1], "TCP") )							socket_type = SOCK_STREAM;						else if (!stricmp(argv[i+1], "UDP") )							socket_type = SOCK_DGRAM;						else							Usage(argv[0]);						i++;						break;					case 'i':						interface = argv[++i];						break;					case 'e':						port = atoi(argv[++i]);						break;					default:						Usage(argv[0]);						break;				}			}			else				Usage(argv[0]);		}	}		if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR) {		fprintf(stderr,"WSAStartup failed with error %d\n",WSAGetLastError());		WSACleanup();		return -1;	}		if (port == 0){		Usage(argv[0]);	}	local.sin_family = AF_INET;	local.sin_addr.s_addr = (!interface)?INADDR_ANY:inet_addr(interface); 	/* 	 * Port MUST be in Network Byte Order	 */	local.sin_port = htons(port);	listen_socket = socket(AF_INET, socket_type,0); // TCP socket		if (listen_socket == INVALID_SOCKET){		fprintf(stderr,"socket() failed with error %d\n",WSAGetLastError());		WSACleanup();		return -1;	}	/*	// bind() associates a local address and port combination with the	// socket just created. This is most useful when the application is a 	// server that has a well-known port that clients know about in advance.	*/	if (bind(listen_socket,(struct sockaddr*)&local,sizeof(local) ) 		== SOCKET_ERROR) {		fprintf(stderr,"bind() failed with error %d\n",WSAGetLastError());		WSACleanup();		return -1;	}	/*	// So far, everything we did was applicable to TCP as well as UDP.	// However, there are certain steps that do not work when the server is	// using UDP.	*/	// We cannot listen() on a UDP socket.	if (socket_type != SOCK_DGRAM) {		if (listen(listen_socket,5) == SOCKET_ERROR) {			fprintf(stderr,"listen() failed with error %d\n",WSAGetLastError());			WSACleanup();			return -1;		}	}	printf("%s: 'Listening' on port %d, protocol %s\n",argv[0],port,		(socket_type == SOCK_STREAM)?"TCP":"UDP");	while(1) {		fromlen =sizeof(from);		//		// accept() doesn't make sense on UDP, since we do not listen()		//		if (socket_type != SOCK_DGRAM) {			msgsock = accept(listen_socket,(struct sockaddr*)&from, &fromlen);			if (msgsock == INVALID_SOCKET) {				fprintf(stderr,"accept() error %d\n",WSAGetLastError());				WSACleanup();				return -1;			}			printf("accepted connection from %s, port %d\n", 						inet_ntoa(from.sin_addr),						htons(from.sin_port)) ;					}		else			msgsock = listen_socket;		while(msgsock){		//		// In the case of SOCK_STREAM, the server can do recv() and 		// send() on the accepted socket and then close it.		// However, for SOCK_DGRAM (UDP), the server will do		// recvfrom() and sendto()  in a loop.		if (socket_type != SOCK_DGRAM)			retval = recv(msgsock,Buffer,sizeof (Buffer),0 );		else {			retval = recvfrom(msgsock,Buffer,sizeof (Buffer),0,				(struct sockaddr *)&from,&fromlen);			printf("Received datagram from %s\n",inet_ntoa(from.sin_addr));		}					if (retval == SOCKET_ERROR) {			closesocket(msgsock);			msgsock = 0;			fprintf(stderr,"recv() failed: error %d\n",WSAGetLastError());			break;		}		if (retval == 0) {			closesocket(msgsock);			msgsock = 0;			printf("Client closed connection\n");			break;		}		/*printf("Received %d bytes, data [%s] from client\n",retval,Buffer);*/		printf("%s\n",Buffer);		//need to send ack here to match php debugger/*		if (socket_type != SOCK_DGRAM)			retval = send(msgsock,"ack",3,0);		else			retval = sendto(msgsock,"ack",3,0,				(struct sockaddr *)&from,fromlen);		if (retval == SOCKET_ERROR) {			fprintf(stderr,"send() failed: error %d\n",WSAGetLastError());		}*/		continue;		} //end receive loop		if (socket_type != SOCK_DGRAM && msgsock){			printf("Terminating connection\n\n");			closesocket(msgsock);		}		printf("\n\nPHPWatch looping back for more requests\n\n");		continue;	}}

⌨️ 快捷键说明

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