ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #101  
Старый 24.07.2007, 23:28
Аватар для Aag
Aag
Познающий
Регистрация: 26.07.2005
Сообщений: 54
Провел на форуме:
47901

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

При компоновке программы с подключением модулей скомпилированных с-компилятором надо дабавлять extern "C", поскольку с++-компилятор, используя имя функции данное человеком, генерирует своё уникальное имя. Линковщик компонуя объектные файлы (библиотеки, dll-ки ...), полученные разными компиляторами просто не обнаружит необходимой функции. Такая ситуация может возникнуть при использовании сторонних библиотек, dll, объектных файлов. А какже при использовании в своем проекте файлов с разными расширениями *.c или *.cpp, поскольку компилятор обращает внимание на раширение файла.
 
Ответить с цитированием

  #102  
Старый 25.07.2007, 22:17
Аватар для Ni0x
Ni0x
Постоянный
Регистрация: 27.08.2006
Сообщений: 367
Провел на форуме:
2009677

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

sys64, использовать функции WinApi, документации хватает.
 
Ответить с цитированием

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

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

qwerty qwerty qwerty

проверка =)
 
Ответить с цитированием

  #104  
Старый 01.08.2007, 14:51
Аватар для X-lord
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..
 
Ответить с цитированием

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

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

сорри за флуд... какой тег исп. для оформления кода?
 
Ответить с цитированием

  #106  
Старый 01.08.2007, 15:13
Аватар для Piflit
Piflit
Banned
Регистрация: 11.08.2006
Сообщений: 1,522
Провел на форуме:
5128756

Репутация: 2032


Отправить сообщение для Piflit с помощью ICQ
По умолчанию

Цитата:
Сообщение от X-lord  
сорри за флуд... какой тег исп. для оформления кода?
[C0DE]...[/C0DE] вместо 0 = O
 
Ответить с цитированием

  #107  
Старый 01.08.2007, 17:07
Аватар для da_ff
da_ff
Участник форума
Регистрация: 11.07.2006
Сообщений: 125
Провел на форуме:
413927

Репутация: 71
Отправить сообщение для da_ff с помощью ICQ
По умолчанию

2 x-lord ИМХО стараюсь избегать высокой вложенности кода
к примеру вместо
если (функция=выпонилась_правил но) то {большой_набор_операторов}
предпочитаю
если (финкция=выполнилась_не_пра вильно) то выход
{большой_набор_операторов}
еще
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;
}
}
возможна ситуация когда сокет будет пуст т.е. все данные которые на него пришли прочитаны, но bufer еще не заполнен тогда если на том конце не запретили передачу данных на сокет то recv остановит выполнение функции т.к. будет ждать данных которые не придут.
тут надо ввести договоренность что все передаваемые сообщения будут заканчиваться какой то комбинацией и тебе надо считывать пока она не придет

Последний раз редактировалось da_ff; 01.08.2007 в 17:32..
 
Ответить с цитированием

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

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

там таймаут какраз для устранения такой комбинации и связанных с ней переполнений...
если пришло меньше лен то можно сушить ласты...
диалоговый режим.
 
Ответить с цитированием

  #109  
Старый 01.08.2007, 19:06
Аватар для da_ff
da_ff
Участник форума
Регистрация: 11.07.2006
Сообщений: 125
Провел на форуме:
413927

Репутация: 71
Отправить сообщение для da_ff с помощью ICQ
По умолчанию

2 X-lord
ты всегда будешь знать сколько бай прочитать? сомневаюсь
это будет работать хорошо только локально, в условиях wan будут проблемы, возможны задержки проблемы с сетью возможно за тайм-аут все данные не успеют придти
в любом случае код очень не универсален и в другой ситуации работать будет не стабильно

кстати я щас тоже сетевым кодингом увлекся стучи в асю будем обмениваться опытом =)

Последний раз редактировалось da_ff; 01.08.2007 в 19:11..
 
Ответить с цитированием

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

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

всмотрись в код получьше...
приняли неполностью - ждём...
неприняли часть вообще - выходим по таймауту...

по задумке в разных частях программы будут разные размеры буферов
функции реализованны синхронно
допустим клиент передаёт команду в 4 байта
2 байта читаются как выбор функции 2 - спускаются на уровень ниже
и читаются как выбор операции(пока нереализованно)допустим функция - файловый менеджер, команда - код операции.
сервер переходит в режим сессии с файл. менеджером
клиент переходит в режим приёма ответа в 2048б
сервер передаёт список дисков, если всё невлезло то приписывает упр. команду кот. это показывает...
клиент это всё принимает(если есть команда "есть ещё" то принимает опять....)
и посылает следующую команду... смысл ясен?

цель-защита от переполнений+устойчивость к сбоям
проще непридумал...
такой способ больше подходит Udp

всё... спать пошёл

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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часто задаваемые вопросы по MySQL Серый PHP, PERL, MySQL, JavaScript 5 28.12.2006 18:26
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Форумы 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ