Сервер-клиент на сокетах: при отправке второго сообщения, программа падает - 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];
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д