Сервер-клиент на сокетах: при отправке второго сообщения, программа падает - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Сервер:
uses Sockets, CRT;
var
  Fromname: array[1..255] of char;
  Buffer,oldbuff,buff,UN: string;
  S:Longint;
  Sin,Sout:text;
  Saddr:TInetSockAddr;
  function error(s:string):boolean;
  begin
  writeln(s,SocketError);
  end;
     function ReadM():string;
     begin
     reset(sin);
     read(sin,ReadM);
     close(sin);
     end;
     function log(t:string):boolean;
     begin
     writeln(t);
     end;
begin
   S:=fpSocket(AF_INET, SOCK_STREAM,0);
   if SocketError<>0 then
      error('fpSocket:');
   SAddr.sin_family:=AF_INET;
   SAddr.port:=htons(5000);
   SAddr.sin_addr.s_addr:=HostToNet((127 shl 24) or 1);
   if fpBind(S,@SAddr, sizeof(saddr))=-1 then
      error('fpBind:')
     else
       writeln('Binding...');
   if fpListen(S,1)=-1 then
      error('fpListen:')
     else
      Writeln('Waiting for client...');
         if not Accept(S,SAddr, Sin, Sout) then
      error('fpAccept:');
repeat
     buffer:=readm();
     if (buffer<>oldbuff) and (buffer<>'') then
        begin
        writeln(buffer);
        oldbuff:=buffer;
        end;
until buffer<>'exit';
end.
Клиент:
uses Sockets,crt;
 
procedure Perror(const S:string);
begin
writeln(S,SocketError);
halt(100);
end;
 
var
Saddr:TinetSockAddr;
Buffer,Buff,oldBuff,UN:string[255];
S:Longint;
Sin,Sout:text;
     function SendM(mess:string):boolean;
     begin
     rewrite(sout);
     writeln(sout,mess);
     close(sout);
     end;
     function log(t:string):boolean;
     begin
     writeln(t);
     end;
begin
S:=fpSocket(AF_INET,SOCK_STREAM,0);
if s=-1 then
        Perror('Client:Socket: ');
SAddr.sin_family:=AF_INET;
SAddr.sin_port:=htons(5000);
Saddr.sin_addr.s_addr:=HostToNet((127 shl 24) or 1);
if not Connect(S,Saddr,Sin,Sout) then
PError('Client : Connect : ');
repeat
     read(buff);
     SendM(buff);
until buff<>'exit';
end.
Оба исходника успешно компилируются и запускаются, проблема том, что когда из под клиента отправляется второе сообщение, все падает. Как это исправить? И ещё... Этот сервер доступен абсолютно всем или только для клиента 127.0.0.1?

Решение задачи: «Сервер-клиент на сокетах: при отправке второго сообщения, программа падает»

textual
Листинг программы
b:=@w[i];

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы