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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Клиент-Сервер-Клиент, winsock 
:(
    Опции темы
ne0n
Дата 20.9.2008, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

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



Привествую всех!
Вообщем задача достаточно простая: Клиент передает серверу запрос\команду, и  на нее сервер должен пересалть клиенту ответ. вообщем с передачей запросов серверу не возникло(кстати пока разбирался нашел ошибку в статье из Drkb "Создание сетевых приложений на Delphi с использованием Windows Sockets API" если кому интересно раскажу в чем там проблема была). как я понял для того чтобы переслать ответ нельзя использовать тот же сокет. Т.е. это надо опять надо создавать сокет, сервер будет конектиться уже к клиенту, а у клиент будет роослушивать порт и принимать ответ. собственно вопрос такой, правильно я мыслю?) smile 

PM MAIL ICQ   Вверх
Matematik
Дата 20.9.2008, 15:01 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

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



> как я понял для того чтобы переслать ответ нельзя использовать тот же сокет.

Можно. Вообще с чего ты это взял?
PM MAIL WWW ICQ   Вверх
BaD_SeCt0R
Дата 20.9.2008, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lazy Coder
**


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

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



Цитата(ne0n @  20.9.2008,  11:30 Найти цитируемый пост)
вопрос такой, правильно я мыслю?

Нет smile


--------------------
Кто владеет информацией - владеет миром. (С) Френсис Бэкон.
PM MAIL ICQ   Вверх
ne0n
Дата 20.9.2008, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

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



Цитата(Matematik @  20.9.2008,  15:01 Найти цитируемый пост)
Можно. Вообще с чего ты это взял?


дык попробовал и не получилось) да и потмо знакомый мне с пеной у рта доказывал что надо создать второй сокет и будет все норм...мне это показалось бредом, поэтому и решил сначало спросить на форуме smile делал также как выше упомянутой статье: 
Код

....
//подключение клиента к серверу

repeat
//Ожидаем подключения.
vWorkSocket := accept(vSocket,nil,nil);
//Клиент подключился, запускаем новый процесс на соединение.
CreateThread(nil,0,@SocketThread,0,0,trId);
until false;


тоже самое сделал в клиенте.
в SocketThread идет проверка на INVALID_SOCKET, и получаю что vWorkSocket как раз INVALID_SOCKET. Такое чуство что надо еще чтото сделать, но никак не пойму что)



Это сообщение отредактировал(а) ne0n - 20.9.2008, 18:08
PM MAIL ICQ   Вверх
Matematik
Дата 20.9.2008, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

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



> в SocketThread идет проверка на INVALID_SOCKET, и получаю что vWorkSocket как раз INVALID_SOCKE
Где-то у тебя в коде ошибка.

Чисто для примера, сокет подключившегося клиента передается через параметр в CreateThread() -> ClientProc()
Прекрасно работает, принимает и отсылает данные по одному сокету, легко проверяется в telnet
Код

type
  PThreadParameter = ^TThreadParameter;
  TThreadParameter = record
    ClientSocket : TSocket;
    {...}
  end;

procedure ClientProc(P: Pointer); stdcall;
var
  cli : integer;
  dat : Char;
begin
  cli := PThreadParameter(p)^.ClientSocket;
  while dat<>#13 do
  begin
    recv(cli, dat, SizeOf(dat), 0);
    send(cli, dat, SizeOf(dat), 0);
  end;
  closesocket(cli);
  Dispose(p);
end;

procedure TForm1.btn1Click(Sender: TObject);
var
  wsaData: TWSAData;
  ServerSocket: TSocket;
  ClientSocket: TSocket;
  SockAddr: TSockAddr;
  i : Integer;
  h : THandle;
  Param : PThreadParameter;
begin
  wsaStartup($101, wsaData);
  ServerSocket := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
  ZeroMemory(@SockAddr, SizeOf(SockAddr));
  SockAddr.sin_family := AF_INET;
  SockAddr.sin_port := htons(12345);
  if bind(ServerSocket, SockAddr, SizeOf(SockAddr))<>0 then
    Exit;
  if listen(ServerSocket, 0)<>0 then
    Exit;

  repeat
    i := SizeOf(SockAddr);
    ClientSocket := accept(ServerSocket, @SockAddr, @i);
    New(Param);
    Param^.ClientSocket := ClientSocket;
    CreateThread(nil, 0, @ClientProc, Param, 0, h);
  until False;

end;

PM MAIL WWW ICQ   Вверх
ne0n
Дата 21.9.2008, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

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



Цитата(Matematik @  20.9.2008,  19:49 Найти цитируемый пост)
Где-то у тебя в коде ошибка.


ммм тогда буду искать ошибку, спасибо за пример.

PM MAIL ICQ   Вверх
BaD_SeCt0R
Дата 21.9.2008, 04:15 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lazy Coder
**


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

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



ne0n, разбери работу с сокетами на стандартных TClientSocket/TServerSocket сначала, тогда подобные вопросы сразу отпадут smile 


--------------------
Кто владеет информацией - владеет миром. (С) Френсис Бэкон.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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