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

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

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

Сервер:
Листинг программы
  1. uses Sockets, CRT;
  2. var
  3. Fromname: array[1..255] of char;
  4. Buffer,oldbuff,buff,UN: string;
  5. S:Longint;
  6. Sin,Sout:text;
  7. Saddr:TInetSockAddr;
  8. function error(s:string):boolean;
  9. begin
  10. writeln(s,SocketError);
  11. end;
  12. function ReadM():string;
  13. begin
  14. reset(sin);
  15. read(sin,ReadM);
  16. close(sin);
  17. end;
  18. function log(t:string):boolean;
  19. begin
  20. writeln(t);
  21. end;
  22. begin
  23. S:=fpSocket(AF_INET, SOCK_STREAM,0);
  24. if SocketError<>0 then
  25. error('fpSocket:');
  26. SAddr.sin_family:=AF_INET;
  27. SAddr.port:=htons(5000);
  28. SAddr.sin_addr.s_addr:=HostToNet((127 shl 24) or 1);
  29. if fpBind(S,@SAddr, sizeof(saddr))=-1 then
  30. error('fpBind:')
  31. else
  32. writeln('Binding...');
  33. if fpListen(S,1)=-1 then
  34. error('fpListen:')
  35. else
  36. Writeln('Waiting for client...');
  37. if not Accept(S,SAddr, Sin, Sout) then
  38. error('fpAccept:');
  39. repeat
  40. buffer:=readm();
  41. if (buffer<>oldbuff) and (buffer<>'') then
  42. begin
  43. writeln(buffer);
  44. oldbuff:=buffer;
  45. end;
  46. until buffer<>'exit';
  47. end.
Клиент:
Листинг программы
  1. uses Sockets,crt;
  2. procedure Perror(const S:string);
  3. begin
  4. writeln(S,SocketError);
  5. halt(100);
  6. end;
  7. var
  8. Saddr:TinetSockAddr;
  9. Buffer,Buff,oldBuff,UN:string[255];
  10. S:Longint;
  11. Sin,Sout:text;
  12. function SendM(mess:string):boolean;
  13. begin
  14. rewrite(sout);
  15. writeln(sout,mess);
  16. close(sout);
  17. end;
  18. function log(t:string):boolean;
  19. begin
  20. writeln(t);
  21. end;
  22. begin
  23. S:=fpSocket(AF_INET,SOCK_STREAM,0);
  24. if s=-1 then
  25. Perror('Client:Socket: ');
  26. SAddr.sin_family:=AF_INET;
  27. SAddr.sin_port:=htons(5000);
  28. Saddr.sin_addr.s_addr:=HostToNet((127 shl 24) or 1);
  29. if not Connect(S,Saddr,Sin,Sout) then
  30. PError('Client : Connect : ');
  31. repeat
  32. read(buff);
  33. SendM(buff);
  34. until buff<>'exit';
  35. end.
Оба исходника успешно компилируются и запускаются, проблема том, что когда из под клиента отправляется второе сообщение, все падает. Как это исправить? И ещё... Этот сервер доступен абсолютно всем или только для клиента 127.0.0.1?

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

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

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


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

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

6   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы