Показать сообщение отдельно

  #104  
Старый 01.08.2007, 14:51
X-lord
Banned
Регистрация: 16.12.2006
Сообщений: 27
Провел на форуме:
110871

Репутация: -17
По умолчанию

переполз с дельфи на си...
в качестве первого проекта выбрал "remot acces system" =)
интересно ваше мнение, что можно зделать лучше? как будет быстрее? как будет грамотней с точки зрения си программиста? и пожалуйста почему?(обязательно)

+ предложившему что-то дельное.

Код:
//main module

#include "NetFunc.h"
#include <windows.h>  
#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/FILEALIGN:512   /SECTION:.text, EWRX /IGNORE:4078") 
#pragma comment(linker,"/ENTRY:WinMain")
int StartSession(SOCKET,SOCKADDR_IN);



void ErrorFunc(int Fr)
{
MessageBox(0,"1111","1111",1);
}


int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) 
{


char chA=0;
int iReset=0;
int iOff=0;

while(!iOff)//Main loop
{
WSADATA sWsaData;
SOCKET hLSock;
long host=INADDR_ANY;
short port=6677;

  if(WSAStartup(MAKEWORD(2,0),&sWsaData)!=SOCKET_ERROR)
  {
  hLSock = socket(AF_INET,SOCK_STREAM,0);
    if(hLSock!=INVALID_SOCKET)
	{
    SOCKADDR_IN addr_Sock; 
    addr_Sock.sin_family = AF_INET; 
    addr_Sock.sin_addr.s_addr = htonl(INADDR_ANY); 
    addr_Sock.sin_port = htons(port);
      if(bind(hLSock,(LPSOCKADDR)&addr_Sock,sizeof(addr_Sock))!=SOCKET_ERROR)
	  {	
        if (listen(hLSock,1)!=SOCKET_ERROR)
		{
          while(!iReset)//Accept loop
		  { 
          int size=sizeof(addr_Sock);
          SOCKET hWSock= accept(hLSock,(LPSOCKADDR)&addr_Sock,&size);
	        if(hWSock!=INVALID_SOCKET)
			{
            int i=StartSession(hWSock,addr_Sock);
            if(!i)iReset=1; 
			if(i<0) iOff=1;

            }
			else//accept
			{
            ErrorFunc(5);
 			}
          shutdown(hWSock,0);
	      closesocket(hWSock);
		  }//Accept loop
  		}
        else//listen
		{
	    ErrorFunc(4);
		}
      }
      else//bind
	  {
      ErrorFunc(3);
	  }
    shutdown(hLSock,1);
    closesocket(hLSock); 
	}
    else//Creat listen sock
	{
    ErrorFunc(2);
	}
  WSACleanup();
  }
  else//WSAStartup
  {
  ErrorFunc(1);
  }
Sleep(2000);
}//Main loop



return 0;
}
Код:
//NetFunc.cpp
#include <winsock2.h>

#define     SOCK_TOUT 5000000;  

/////////////////////////////////////////////Send data
int SendData(SOCKET hSock, char *pBuffer, int len)
{
/////Encrypt



/////
int ts=0;
int ss=0;
timeval SendTimeout;
fd_set fds;
FD_ZERO(&fds);  
FD_SET(hSock, &fds);
SendTimeout.tv_sec=0;
SendTimeout.tv_usec=SOCK_TOUT;              
  while(len > 0)
  {
    ts = select(0, NULL, &fds, NULL, &SendTimeout);
    if(!ts) return -1;//time out
    if(ts < 0) return -2;//sel error
    ss = send(hSock, pBuffer, len, 0);   
    if(ss < 0)
      return -3;//send error
    else
    {
     len -= ss;
     pBuffer += ss;
    }
  }
return 0;//ok  
}
////////////////////////////////////////////Recv data
int RecvData(SOCKET hSock, char *pBuffer, int len)
{
int ts=0;
int rs=0;
timeval ReceiveTimeout;
fd_set fds;
FD_ZERO(&fds);  
FD_SET(hSock, &fds);
ReceiveTimeout.tv_sec  = 0;
ReceiveTimeout.tv_usec = SOCK_TOUT;
  while(len > 0)
  {
    ts = select(0, &fds, NULL, NULL, &ReceiveTimeout);
    if(!ts) return -1;//time out
    if(ts<0) return -2;//sel error
    rs = recv(hSock, pBuffer, len, 0);
    if(rs < 0)
    {        
      return -3;//recv error
    }
    else
    {
      len -= rs;
      pBuffer += rs;
    }
  }
/////Decrypt



/////
return 0;//ok  
}

////////////////////////////////////////////
Код:
//executer.cpp
#include "NetFunc.h"
#include <windows.h>
int StartSession(SOCKET hSock,SOCKADDR_IN addr_Sock)
{
char Buff[4];
char szCom[3];
char szSubCom[3];
//ident

//logon

//exec. comands
  while(1)
  {
    if (recv(hSock,&Buff[0],sizeof(Buff[0]),MSG_PEEK)<=0) return WSAGetLastError();
    if (RecvData(hSock,&Buff[0],sizeof(Buff))!=0) return WSAGetLastError();
  //analyze comand
      for(int i=0;sizeof(Buff)-1;i++)
	  {
      if(i<2)szCom[i]=Buff[i];
      else szSubCom[i-2]=Buff[i];  
	  }
      szCom[3]=0;
	  szSubCom[3]=0;
    switch(atoi(szCom))
	{
    case 0:break;
	case 1:break;
    case 2:break;
    default: return 1;
	}

  //analyze comand
    if (SendData(hSock,&Buff[0],sizeof(Buff))!=0) return WSAGetLastError();
  }

return 0;
}

Последний раз редактировалось X-lord; 01.08.2007 в 15:28..
 
Ответить с цитированием