Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2012, 11:32   #1
ИВэТэшка
Пользователь
 
Аватар для ИВэТэшка
 
Регистрация: 01.02.2009
Сообщений: 52
Радость NetPaint, работа с Socket-ми

Добрый день! Помогите, пожалуйста, разобраться, в чем тут ошибка.
Суть программы в следующем, запускается сервер и клиент, на клиенте рисуем что-нибудь (TImage), на сервере тоже самое должно отобразиться.

Код клиента (отправляющая его часть):
Код:
procedure TForm1.btn2Click(Sender: TObject);
  var i,j: integer;
begin
  for i:=0 to img1.Width-1 do
    for j:=0 to img1.Height-1 do
      begin
        if img1.Canvas.Pixels[i,j] = clBlack then
          mas[i,j] := True;
      end;
  ClientSocket1.Socket.SendBuf(mas, SizeOf(mas));
end;
Код сервера:
Код:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
  var i,j: Integer;
begin
  Socket.ReceiveBuf(mas, SizeOf(mas));
  edt1.Text := IntToStr(SizeOf(mas));
  for i:=0 to img1.Width-1 do
  begin
    for j:=0 to img1.Height-1 do
      begin
        if mas[i,j] = True then
          img1.Canvas.Pixels[i,j] := clBlack;
      end;
  end;
end;
При работе с TImage 200х200 получаем:
Рисуем на клиенте:
1.bmp
Получаем на сервере:
2.bmp
При работе с TImage 80х80 на клиенте и сервере получаем (т.е. все правильно:-) ):
3.bmp
Машины должны работать! Люди должны думать!
ИВэТэшка вне форума Ответить с цитированием
Старый 07.02.2012, 11:53   #2
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Попробуйте просто отправлять и грузить изображение на сервер:

Код:
procedure TForm1.btn2Click(Sender: TObject);
var
Size: integer;
begin
//Так отправлять
Size:= img1.Picture.Bitmap.Width * img1.Picture.Bitmap.Height;
ClientSocket1.Socket.SendBuf(Pointer(img1.Picture.Bitmap)^, size);
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
Size: integer;
begin
//Так принимать сразу загружать картинку
Socket.ReceiveBuf(Pointer(img1.Picture.Bitmap)^, Size);
edt1.Text := IntToStr(Size);
end;
В вашем примере ошибка может быть из за того что прием не всего изображения идет а частями, когда изображение большое нужно догружать все данные, тут нужно еще проверку делать на полный прием всего размера, а уже потом выводить результат и в моем примере нужно тоже делать провеку при большом изображение. И еще ошибка в том что идет наложение изображение на изображение, канву image нужно очищать перед приемом.
очистка канвы
Код:
img1.canvas.fillrect(img1.canvas.cliprect);
Поищите на этом форуме примеры по поводу передачи изображение по сети.

Последний раз редактировалось Aliens_wolfs; 07.02.2012 в 12:42.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
try except and socket Pein95 Общие вопросы Delphi 2 13.05.2011 22:54
Работа программы через сеть - ошибка Socket Error #11004 ??? $T@LKER Помощь студентам 2 30.07.2010 14:20
Работа с сокетами (Socket.Data) SanekIrk Работа с сетью в Delphi 3 23.05.2010 16:12
Работа с Socket-ом c помощю WinAPI 69 region Помощь студентам 13 11.04.2008 17:22
Работа Client i Server socket на уровнях модели OSI ilyano Работа с сетью в Delphi 3 31.10.2007 08:40