Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> winsock2, Клиент -- на C++, сервер -- на Delphi 
:(
    Опции темы
X-3R1
Дата 10.4.2008, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 28.4.2007

Репутация: нет
Всего: 2



Проблема при использовании различных языков для реализации сервера.

Когда и клиент и сервер написаны на C++, то всё работает как надо. При написании сервера на Delphi возникают проблемы: клиенту приходит первая посылка с нормальными данными, затем всегда присылаются 0 байт, хотя сервер данные отсылает.

Реализация сервера должна быть именно на Delphi )

клиент C++
Код

//
// занесение IP адреса и порта
//
mIp = new char[strlen(ip) + 1];
for(int j = 0; j < strlen(ip) + 1; j++)
mIp[j] = ip[j];    
mPort = port;

//
// инициализация библиотеки для работы с сокетами
//
WSADATA stWSADataTCPIP;
WSAStartup(0x0101, &stWSADataTCPIP)

//
// занесение данных в структуры
//
mPeer.sin_family = AF_INET;
mPeer.sin_port = htons(mPort);
mPeer.sin_addr.s_addr = inet_addr(mIp);    

//
// создание сокета
// 
mSocket = socket(AF_INET, SOCK_STREAM, 0);

//
// подключение к сокету
//
mResult = ::connect(mSocket, (struct sockaddr*)&mPeer, sizeof(mPeer));

// принимаем данные
for(;;){
    mResult = recv(mSocket, mTmpData, strlen(mTmpData), 0);
    if(mResult <= 0)
        throw (TcpReadError(mIp, mPort, ""));
    mTmpData[mResult] = '\0';

    //
    // обрабатыаем данные
    //
    ...
}


C++ сервер
Код

//
// инициализация
//
WSAStartup(0x0101, &stWSADataTCPIP)

local.sin_family = AF_INET;
local.sin_port = htons(5050);
local.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

s = socket(AF_INET, SOCK_STREAM, 0);
rc = bind(s, (struct sockaddr *)&local, sizeof(local));
rc = listen(s, 5);
s1 = accept(s, NULL, NULL);

//
// отправляем данные
// 
for(;;){
    char buff[] = "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0*";
    rc = send(s1, buff, strlen(buff), 0);
    if(rc <= 0)
    {
        std::cout << "send failed" << std::endl;
    }
}


Delphi сервер
Код

procedure tsoket.execute;
var
i,j: integer;
s: string;
begin
  inherited;
    WSAStartup($101,Data);

    Soc:=Socket(AF_Inet,Sock_Stream,0);
    Addr.sin_family:=PF_Inet;
    Addr.sin_port:=HToNS(5050);
    Addr.sin_addr.S_addr:=InAddr_Any;
    FillChar(Addr.Sin_Zero,SizeOf(Addr.Sin_Zero),0);

    Bind(Soc,Addr,SizeOf(TSockAddr));
    Listen(Soc,SoMaxConn);
    Len:=SizeOf(TSockAddr);
    AcceptedSock:=Accept(Soc,@Addr,@Len);

    while True do
     begin
      send(AcceptedSock, buff, sizeof(buff), 0);
     end;
end;

PM MAIL   Вверх
Rouse_
Дата 10.4.2008, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 5
Всего: 29



Цитата(X-3R1 @  10.4.2008,  11:09 Найти цитируемый пост)
затем всегда присылаются 0 байт

Эмм? Это как? 1 байт я конечно могу понять, но чтоб 0 байт да еще и прислалось...


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Mikh@il
Дата 11.4.2008, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



Код

   Soc:=Socket(AF_Inet,Sock_Stream,0);
   Addr.sin_family:=PF_Inet;



Почему в одном случае семейство AF_Inet а во втором PF_Inet ????


А еще какой-то у тя сервер странный ниче не принимает(recv),

только по какому-то условию: 

 while True do
  отправляет (send)

Это сообщение отредактировал(а) Mikh@il - 11.4.2008, 15:44
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0504 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.