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

📄 tcp.c

📁 linux下的jtag调试软件
💻 C
字号:
/******************************************************************************\ * tcp (Library)                                                              * ****************************************************************************** * Library for tcp. for win32 and Unix(BSD)                                   * * auteur   : Leto, @ngel$                                                    * * date     : 7-09-1999                                                      *\******************************************************************************///	Leto's 1st steps in network programming.//	server side code. + @ngel$ win32 add-ons...//	Blux... win...#include "tcp.h"struct sockaddr_in srv_addr, cli_addr;int cli_addr_len = sizeof(srv_addr);int sSocket;char szerror[128];int nerror;char hostname[128];// start a server with x connections...int tcpstartsrv(int port,				   int nnoc){	// struct hostent *h_info;	// initialisation de winsock...	#ifdef WIN32		// winsock startup...		WSADATA			WSAData;		// initializing in 1.1 mode...		int nRc = WSAStartup(0x0101, &WSAData);		// check initialization...		if (nRc)		{			nerror = 1;			sgeterror();			return -1;		}		// check version...		if (WSAData.wVersion != 0x0101)		{			nerror = 2;			sgeterror();			WSACleanup();			return -1;		}	#endif	/* 	 * Getting host IP is'nt necessary, because you want 	 * to answer all requests not only the request for a particular 	 * name of the host.	 	// get host information	if ( gethostname(hostname, sizeof(hostname))!= 0 ) 	{		nerror = 5;		sgeterror();		return -1;	}	// get host IP	if ( (h_info=gethostbyname(hostname)) == 0) {		nerror = 4;		sgeterror();		return -1;	}	*/			// open the socket...	sSocket = socket(AF_INET, SOCK_STREAM, 0);	// bind it to localhost...	memset(&srv_addr, 0, sizeof(srv_addr));	srv_addr.sin_family = AF_INET;	// addr = 0.0.0.0, it's fine.	//memcpy( &srv_addr.sin_addr, h_info->h_addr_list[0], h_info->h_length);	srv_addr.sin_port = htons((unsigned short)port);	if ( bind(sSocket, (struct sockaddr *)&srv_addr, sizeof(srv_addr)) != 0 ) 	{		nerror = 8;		sgeterror();		close(sSocket);		sSocket = -1;		return -1;	}	// listening...	listen(sSocket, nnoc);	{ 		int yes = 1;		setsockopt(sSocket,  IPPROTO_TCP, SO_REUSEADDR, (char*)&yes, sizeof(yes));	}	return 0;} // end tcpstartserver// start a tcp Clientint tcpstartclient(int port,				   char* server){	struct hostent *h_info;	// initialisation de winsock...	#ifdef WIN32		// winsock startup...		WSADATA			WSAData;		// initializing in 1.1 mode...		int nRc = WSAStartup(0x0101, &WSAData);		// check initialization...		if (nRc)		{			nerror = 1;			sgeterror();			return -1;		}		// check version...		if (WSAData.wVersion != 0x0101)		{			nerror = 2;			sgeterror();			WSACleanup();			return -1;		}	#endif	// TODO add error code in case sSocket is not valide...	// nerror = 3;	sSocket = socket(AF_INET, SOCK_STREAM, 0);	// get Host IP	if ((h_info = gethostbyname(server)) == NULL) 	{		nerror = 4;		sgeterror();		return -1;	}	memset(		&srv_addr, 		0, 		sizeof(srv_addr));	srv_addr.sin_family = AF_INET;	memcpy(		&srv_addr.sin_addr.s_addr, 		h_info->h_addr_list[0], 		4);	srv_addr.sin_port = htons((unsigned short)port);	if (connect(sSocket, (struct sockaddr *)&srv_addr, sizeof(srv_addr))!=0) 	{		nerror = 7;		sgeterror();		return -1;	}	return 0;} // end tcpstartclient// put error on the stdoutint geterror(){	if (!sgeterror())	{		// known error		printf("Error : %s\n", szerror);	}	else	{		printf("Unknown error : ");		if (nerror != 0)		{			// unknown normal error			printf("%x\n", nerror);		}		else 		{			// in case of Non normal error			#ifdef WIN32				printf("%x\n",WSAGetLastError());				return WSAGetLastError();			#else				perror("perror");			#endif		}	}	return nerror;} // end geterror()// String error Processing...int sgeterror(){	// Normal errors	// TODO	switch(nerror)	{	case 1	: sprintf(szerror, "Cannot initialize Winsock");		return 0;	case 2	: sprintf(szerror, "Incompatible ver of Winsock");		return 0;	case 3	: sprintf(szerror , "Impossible to start socket");		return 0;	case 4	: sprintf(szerror , "Cannot resolve Hostname");		return 0;	case 5	: sprintf(szerror, "Can't get server hostname");		return 0;	case 6	: sprintf(szerror, "Can't bind socket to localhost");		return 0;	case 7  : sprintf(szerror, "Can't connect");		return 0;	case 8 : sprintf(szerror, "Can't start server (is another one running ?)");		 return 0;	//default : return -1;	}	// Windows WSA errors	#ifdef WIN32		switch(WSAGetLastError())		{		case WSANOTINITIALISED	: sprintf(szerror, "WSANOTINITIALISED");				break;		case WSAENETDOWN		: sprintf(szerror, "WSAENETDOWN");					break;		case WSAEADDRINUSE		: sprintf(szerror, "WSAEADDRINUSE");					break;		case WSAEINTR			: sprintf(szerror, "WSAEINTR");						break;		case WSAEINPROGRESS		: sprintf(szerror, "WSAEINPROGRESS");					break;		case WSAEALREADY		: sprintf(szerror, "WSAEALREADY");					break;		case WSAEINVAL			: sprintf(szerror, "WSAEINVAL");						break;		case WSAEADDRNOTAVAIL	: sprintf(szerror, "WSAEADDRNOTAVAIL");				break;		case WSAEAFNOSUPPORT	: sprintf(szerror, "WSAEAFNOSUPPORT");				break;		case WSAECONNREFUSED	: sprintf(szerror, "WSAECONNREFUSED");				break;		case WSAEFAULT			: sprintf(szerror, "WSAEFAULT");						break;		case WSAEISCONN			: sprintf(szerror, "WSAEISCONN");						break;		case WSAENETUNREACH		: sprintf(szerror, "WSAENETUNREACH");					break;		case WSAENOBUFS			: sprintf(szerror, "WSAENOBUFS");						break;		case WSAENOTSOCK		: sprintf(szerror, "WSAENOTSOCK");					break;		case WSAETIMEDOUT		: sprintf(szerror, "WSAETIMEDOUT");					break;		case WSAEWOULDBLOCK		: sprintf(szerror, "WSAEWOULDBLOCK");					break;		case WSAEACCES			: sprintf(szerror, "WSAEACCES");						break;		case WSAEMFILE			: sprintf(szerror, "WSAEMFILE");						break;		case WSAEOPNOTSUPP		: sprintf(szerror, "WSAEOPNOTSUPP");					break;		default: return -1;			break;		}		return 0;	#else		return -1;	#endif} // end sgeterror// close connectionint tcpstop(){	#ifdef WIN32		WSACleanup();	#else		close(sSocket);	#endif	// TODO add close for the server sockets...	return 0;} // end tcpstopint close_socket(int mySock){#ifdef WIN32	return closesocket(mySock);#else	return close(mySock);#endif}

⌨️ 快捷键说明

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