|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Простейшая онлайн рисовалка для новичков через сокеты
Всегда тянуло к програмкам хоть как-то связанным с взаимодействием пользователей. Первое и самое простенькое, что решил написать, это чат на сокетах, погуглил, благо в интернете много гайдов по этой теме, написал. Чат был ужасно примитивным, поэтому, ради практики, решил немного увеличить его функционал, введя список пользователей, небольшой фильтр мата и тому прочее. Это всё делалось не ради чего-то высшего, а ради себя. И вот между тем решил еще чуть более усложнить программку и рядом с самим окном чата сделать небольшую стену, для общего рисования, где можно творить всем и сразу.
О том как сделать сам чат говорить не буду, т.к. а) В интернете очень много гайдов по этой теме б) Первая программа которую я написал на сокетах и был тот самый чат по тем самым гайдам, и оттого работа рисовалки очень схожа с работой чата. Программа будет с очень бедным функционалом, только окошко для рисования, никакого списка юзеров и т.п.. И так! Будем писать и сервер, и клиент, причем второй получился у меня более сложный по содержанию, поэтому начнём пожалуй с сервачка От сервера нам многое и не надо. Он всего-то и нужен нам для того, чтобы рассылать полученные координаты всем остальным юзверям, ну и естественно работал, поэтому из компонентов понадобится только две кнопки ( для запуска и остановки ), любая компонента для ввода порта, я взял TEdit, ну и сердце нашего сервера ServerSocket ( кидайте куда угодно, в готовой скомпилированной программе Вы его не увидите) . Естественно в коде можно забить один порт без права его ввода, но давайте лучше дадим свободы. Ну, с интерфейсом справились. Перейдем к самому коду. Тут писать много не надо. Запуск сервера осуществляется по такой процедуре. Код:
procedure TForm1.Button1Click(Sender: TObject); var port,err:integer; begin val(edit1.text,port,err); ServerSocket1.Port:=port; ServerSocket1.Active:=True; end; Код:
procedure TForm1.Button2Click(Sender: TObject); begin ServerSocket1.Active:=False; end; Не красота конечно, ну ладно, переживём. Первое что надо сделать это коннект: Код:
procedure TForm1.Button2Click(Sender: TObject); var port,err:integer; begin ClientSocket1.Host:=Edit1.text; val(edit2.text,port,err); ClientSocket1.Port:=port; ClientSocket1.Open; end; Код:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin moused:=True; end; procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin moused:=False; end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var x1,y1:string; var send:string; begin if moused then begin str(x,x1); str(y,y1); send:=x1+' '+y1; ClientSocket1.Socket.SendText(send); end; end; Код:
procedure TForm1.ServerSocket1ClientWrite(Sender: TObject; Socket: TCustomWinSocket); var koordinati:string; var i:integer; begin koordinati:=Socket.ReceiveText; for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do ServerSocket1.Socket.Connections[i].SendText(Socket.ReceiveText); end; Код:
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); var textik:string; x1,y1,i,err,j:integer; koor:string; begin textik:=Socket.ReceiveText; for i:=1 to length(textik) do begin if textik[i]<>' ' then koor:=koor+textik[i] else if textik[i]=' ' then begin val(koor,x1,err); break; end; end; koor:=''; for j:=i+1 to length(textik) do koor:=koor+textik[j]; val(koor,y1,err); Image1.Canvas.Pixels[x1,y1]:=clBlack end; И так, вроде бы всё готово, компилируем обе программы, запускаем сервер, вводим порт, жмем старт, запускаем клиент, вводим необходимые данные и коннектимся. Тадааам! http://justforfun27.livejournal.com/ Последний раз редактировалось Sn0wSky, 05.12.2011 в 19:58. |