Sockets, Сервер не работает.

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Sockets, Сервер не работает.

Сообщение Polinom2686 » 03.01.2010 23:55:35

Всем привет. Тренируюсь в работе с сокетами.
Проблема в том, что сервер не принимает данные от клиента. Это при том, что клиент пишет, что данные отправлены.
Сервер пишет Listen - OK и данные не принимает.

Подскажите, что не так.

IP сервера: 172.23.170.74
IP клиента: 172.23.173.74

Компилятор FPC 2.2.2

Сервер

Код: Выделить всё
Program Sockets_;

Uses Crt,Sockets;

Var Sock,Sock_new : LongInt;
    SAddr : TInetSockAddr;
    buf : ^Word;
    Key_ : Boolean;
    SAddrLength : LongWord;

Begin
ClrScr;
Sock:=fpsocket(AF_INET,SOCK_STREAM,0);
If (Sock = -1) then begin
                    Writeln('Socket Error');
                    ReadLn;
                    Halt;
                    end
               else writeln ('Socket created - OK');
SAddr.sin_family:=AF_INET;
SAddr.sin_Port:=htons(50000);
SAddr.sin_addr:=StrToNetAddr('172.23.170.74');
If (fpbind(Sock,@SAddr,SizeOf(SAddr)) = -1) then begin
                                                 Writeln('Bind Error ',SocketError,'    press Enter');
                                                 ReadLn;
                                                 Halt;
                                                 end
                                            else writeln ('Bind - OK');
If (fplisten(Sock,1) = -1) then begin
                                Writeln('Listen Error, press Enter');
                                ReadLn;
                                Halt;
                                end
                           else writeln ('Listen - OK');
Key_:=True;
New(buf); 
While Key_ do begin  //Программа выполняет цикл, но данные не читает.
              Sock_new:=fpaccept(Sock,@SAddr,@SAddrLength);
              If (Sock_new >= 0) then writeln ('New socket - OK');
              If (fprecv(Sock_new,@buf,SizeOf(Word),0)>=0) then begin
                                                                WriteLn(buf^);
                                                                Dispose(buf);
                                                                Key_:=False;
                                                                end;
              Delay(1);
              end;
If (Shutdown(Sock_new,2) = 0) then begin
                                   WriteLn('Socket closed, press Enter.');
                                   ReadLn;
                                   Halt;
                                   end;
End.




Клиент

Код: Выделить всё
Program Sockets_;

Uses Crt,Sockets;

Var Sock,Sock_new : LongInt;
    SAddr : TInetSockAddr;
    buf : ^Word;
    Key_ : Boolean;
    SAddrLength : LongWord;

Begin
ClrScr;
Sock:=fpsocket(AF_INET,SOCK_STREAM,0);
If (Sock = -1) then begin
                    Writeln('Socket Error');
                    ReadLn;
                    Halt;
                    end
               else writeln ('Socket created - OK');
SAddr.sin_family:=AF_INET;
SAddr.sin_Port:=htons(50000);
SAddr.sin_addr:=StrToNetAddr('172.23.170.74');
Key_:=True;
New(buf);
buf^:=26;
While Key_ do begin
              If (fpconnect(Sock,@SAddr,SizeOf(SAddr)) <> -1) then
                     begin
                     WriteLn('Connect - OK');
                     If (fpsend(Sock,@buf,SizeOf(Word),0)>=0) then begin
                                                                   WriteLn('Send - OK');
                                                                   Dispose(buf);
                                                                   Key_:=False;
                                                                   end;
                     end;
              Delay(1);
              end;
If (Shutdown(Sock,2) = 0) then begin
                               WriteLn('Socket closed, press Enter.');
                               ReadLn;
                               Halt;
                               end;
End.
Polinom2686
незнакомец
 
Сообщения: 8
Зарегистрирован: 02.09.2009 02:01:29

Re: Sockets, Сервер не работает.

Сообщение pihter » 13.01.2010 03:29:24

Просмотрел все, вроде верно.
Цикл, говоришь, крутится? Стало быть, вот тут:
Код: Выделить всё
If (fprecv(Sock_new,@buf,SizeOf(Word),0)>=0) then begin

fprecv возвращает -1. Это, если я правильно понимаю, ошибка приема данных на уровне ОС. Кстати, ОС какая? Может его фаёвол перехватывает или, там, антивирус какой... уверен, что с сетевой подсистемой все в порядке?
pihter
новенький
 
Сообщения: 12
Зарегистрирован: 13.01.2010 02:40:33

Re: Sockets, Сервер не работает.

Сообщение Polinom2686 » 17.01.2010 21:17:59

Всем спасибо, решил проблему самостоятельно

http://forum.sources.ru/index.php?showtopic=291403

Добавлено спустя 1 минуту 22 секунды:
ОС - Windows XP
Polinom2686
незнакомец
 
Сообщения: 8
Зарегистрирован: 02.09.2009 02:01:29

Re: Sockets, Сервер не работает.

Сообщение Polinom2686 » 16.02.2010 19:18:02

В продолжении темы:
Как с помощью Сокетов связываться не только по локальной сети, но и через интернет?
При этом известны IP адреса (в локальной сети и внешний адрес) как сервера, так и клиента.
Polinom2686
незнакомец
 
Сообщения: 8
Зарегистрирован: 02.09.2009 02:01:29

Re: Sockets, Сервер не работает.

Сообщение pihter » 19.02.2010 16:41:08

Сокету все равно работает он в ЛС или в Интернете. Следоветельно, работать с сокетами в Интернете нужно так же как и в локальной сети. Если IP-адрес сервера доступен с машины, на которой работает клиент - то делать нужно все так же как и в ЛС. (Доступность сервера можно проверить конандой ping) Если сервер недоступен, значит нужно сделать чтобы был доступен, например обзавестись реальным IP-адресом
pihter
новенький
 
Сообщения: 12
Зарегистрирован: 13.01.2010 02:40:33

Re: Sockets, Сервер не работает.

Сообщение Polinom2686 » 19.02.2010 21:16:17

Спасибо.
Polinom2686
незнакомец
 
Сообщения: 8
Зарегистрирован: 02.09.2009 02:01:29


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru