Сервер-клиент на сокетах: при отправке второго сообщения, программа падает - Free Pascal
Формулировка задачи:
Сервер:
Клиент:
Оба исходника успешно компилируются и запускаются, проблема том, что когда из под клиента отправляется второе сообщение, все падает. Как это исправить? И ещё... Этот сервер доступен абсолютно всем или только для клиента 127.0.0.1?
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.Решение задачи: «Сервер-клиент на сокетах: при отправке второго сообщения, программа падает»
textual
Листинг программы
b:=@w[i];