Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2011, 18:40   #1
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию WinSock. Клиент и сервер.

Добрый вечер. У меня возникла проблема, которую не в состоянии объяснить. Имеется исходник работающего сервера и клиента, и аналогичная группа(клиент/сервер), но не работающая. В чем причина, как я уже писал, не знаю.
Рабочая группа
Сервер
Код:
var
   inf:TWSADATA;
   i,z,socks,sockc: integer;
   sockaddr: TSockAddr;
   s: array[0..100] of Char;
begin
   WSAStartup(MAKEWORD(2,0),inf);                   // Инициализируем библиотеку
   socks:=socket(AF_INET,SOCK_STREAM,0);            // Получаем параметр для переменной
   sockaddr.sin_family := AF_INET;                  // Опишем структуру  TSockAddr
   sockaddr.sin_port := htons(210);                 // ...
   sockaddr.sin_addr.S_addr := htonl(INADDR_ANY);   // ...
   bind(socks,sockaddr,sizeof(sockaddr));          // Привяжем структуру к сокету
   listen(socks,3);                                 // Начинаем слушать
   i:=sizeof(sockaddr);
   while true do                                    // Бесконечный цикл в ожидании коннекта
   begin
      sockc:=accept(socks,@sockaddr,@i);              // Присваиваем переменной ответ коннекте
      //ShowMessage(inttostr(z));
      if sockc<>-1 then                             // Если есть коннект
      begin
         z:=recv(sockc,s,Length(s),0);              // Примем данные
         if z<>-1 then                              // оок?
         begin
            ShowMessage('Клиент передает: '+s);     // Если ок, то выводим их
            s:='Здарова';                           // данные в ответ
            send(sockc,s,Length(s),0);              // Посылаем 
         end;
      end;
   end;
Клиент:
Код:
var
   Server:TInaddr;
   inf: TWSADATA;
   z,socks: integer;
   sockaddr: TSockAddr;
   s: array[0..100] of Char;
begin
   s:='Привет';                                                 
   Server.s_addr:=inet_addr('127.0.0.1');               
   WSAStartup(MAKEWORD(2,0),inf);                        
   socks:=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);    
   sockaddr.sin_family := AF_INET;                        
   sockaddr.sin_port := htons(210);                           
   sockaddr.sin_addr := Server;                               
   if connect(socks,sockaddr,sizeof(sockaddr))<>-1 then  
   begin
      send(socks,s,Length(s),0);                              
      while true do                                          
      begin
         z:=recv(socks,s,Length(s),0);                          
         if z<>-1 then                                         
         ShowMessage('Сервер передает: '+s);                
      end;
   end;
И неработающая
Сервер
Код:
var
inf:TWSADATA;
Sock,Connect,r,i:integer;
sockAddr:TSockAddr;
str:string;
begin
  WSAStartup(MAKEWORD(1,0),inf);
  sock:=Socket(AF_INET,SOCK_STREAM,0);
  SockAddr.sin_family:=AF_INET;
  SockAddr.sin_port:=htons(7254);
  SockAddr.sin_addr.S_addr:=htonl(INADDR_ANY);
  bind(sock,Sockaddr,SizeOf(SockAddr));
  Listen(Sock,3);
  i:=SizeOF(SockAddr);
  while True do
  begin
    Connect:=Accept(sock,@sockAddr,@i);
    if Connect=-1 then exit;
       r:=recv(Connect,str,SizeOF(str),0);
       if r=-1 then exit;
        ShowMessage(Str);
  end;
Клиент
Код:
var
inf:WSADATA;
Sock:integer;
Client:TSockAddr;
Server:TinAddr;
str,sendd:String;
begin
 WSAStartup(MAKEWORD(1,0),inf);
 sock:=Socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
 Client.sin_family:= AF_INET;
 Client.sin_port:=htons(7254);
 Server.S_addr:=Inet_addr('127.0.0.1');
 Client.sin_addr:=Server;
 if connect(Sock,Client,SizeOf(Client))=-1 then exit;
  sendd:='Привет Сервер!';
  Send(Sock,sendd,SizeOf(Sendd),0);
  while true do
  begin
    if recv(Sock,str,SizeOf(Str),0)=-1 then ShowMessage(str);
    sleep(200);
  end;
Чем они отличаются, и почему вторая группа не хочет "общаться"?
Заранее благодарю.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 01.11.2011 в 18:42.
_PROGRAMM_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отправить видео захват(с веб-Кам.) Клиент->Сервер->Клиент RODNOC Мультимедиа в Delphi 17 03.10.2010 22:31
Клиент-Сервер на WinSock Onekey Работа с сетью в Delphi 1 21.08.2010 14:41
Клиент-Сервер на WinSock Вишенка Работа с сетью в Delphi 3 24.02.2010 00:45
Возможно-ли Клиент-серверное приложение типа Клиент(Pascal) а сервер(CGI)? Demol Работа с сетью в Delphi 1 21.04.2009 16:18