{"id":100,"date":"2008-01-12T22:18:35","date_gmt":"2008-01-12T19:18:35","guid":{"rendered":"http:\/\/pblog.ru\/?p=100"},"modified":"2008-08-10T18:33:27","modified_gmt":"2008-08-10T15:33:27","slug":"%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5-%d0%bc%d0%bd%d0%be%d0%b3%d0%be%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d1%82%d0%b5%d0%bb%d1%8c%d1%81%d0%ba%d0%be%d0%b3%d0%be-%d1%87%d0%b0%d1%82","status":"publish","type":"post","link":"http:\/\/pblog.ru\/?p=100","title":{"rendered":"\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0447\u0430\u0442\u0430"},"content":{"rendered":"<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 (\u201c\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u0430\u201d) \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0433\u043e \u0447\u0430\u0442\u0430 \u043d\u0430 \u0434\u0432\u043e\u0438\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0447\u0430\u0442\u0430 \u201chead-to-head\u201d \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430, \u0432\u0435\u0434\u044c \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043a\u0430\u043d\u0430\u043b, \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440, \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u2013 \u043a\u043b\u0438\u0435\u043d\u0442. Multy-user-\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u0415\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u0421\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u0442 \u0438\u0445 \u043f\u043e \u043d\u0443\u0436\u043d\u044b\u043c \u043a\u0430\u043d\u0430\u043b\u0430\u043c, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435\u043c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043e\u0431\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p><strong>\u041c\u043d\u043e\u0433\u043e\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0447\u0430\u0442 (Multy-user on-line)<\/strong><\/p>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0447\u0430\u0442\u0430 \u0441 \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u0444\u043e\u0440\u043c\u044b \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u0438\u043b\u0438 \u0441 \u043d\u043e\u0432\u043e\u0439. \u0412\u043e\u0442, \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0435:<\/p>\n<p><strong>PortEdit<\/strong> (Edit)<br \/>\n<strong>HostEdit<\/strong> (Edit)<br \/>\n<strong>NikEdit<\/strong> (Edit)<br \/>\n<strong>TextEdit<\/strong> (Edit)<br \/>\n<strong>ChatMemo<\/strong> (Memo)<br \/>\n<strong>ClientBtn<\/strong> (Button)<br \/>\n<strong>ServerBtn<\/strong> (Button)<br \/>\n<strong>SendBtn<\/strong> (Button)<br \/>\n<strong>ServerSocket<\/strong> (ServerSocket)<br \/>\n<strong>ClientSocket<\/strong> (ClientSocket)<\/p>\n<p>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 Delphi <strong>ServerSocket<\/strong> \u0438 <strong>ClientSocket<\/strong> \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044b \u0432 \u043f\u0430\u043b\u0438\u0442\u0440\u0435 <strong>Internet<\/strong>, \u0438 \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>\u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043c\u0435\u043d\u044e: Component &#8212; Install Packages&#8230; &#8212; Add., \u0434\u0430\u043b\u0435\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u0430\u0439\u043b &#8230;\\bin\\dclsockets70.bpl.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b:<\/p>\n<p><strong>UserListView<\/strong> (ListView)<br \/>\n<strong>ImageList<\/strong> (ImageList)<br \/>\n<strong>ServerTimer<\/strong> (Timer)<\/p>\n<p><!--more--><\/p>\n<p><strong>UserListView<\/strong> \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0421\u0430\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <strong>ListView<\/strong> \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043e\u0442\u0447\u0435\u0442: \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <strong>ViewStyle = vsReport<\/strong> (\u0441\u0442\u0438\u043b\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b), \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <strong>ShowColumnHeaders = False<\/strong> (\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432), \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <strong>ReadOnly = True<\/strong> (\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435), \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <strong>SmallImages = ImageList<\/strong> (\u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u0438\u043a\u043e\u043d\u043a\u0430\u043c\u0438). \u0414\u0432\u043e\u0439\u043d\u044b\u043c \u043a\u043b\u0438\u043a\u043e\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 <strong>ListView<\/strong> \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 <strong>Editing UserListView.Columns<\/strong>. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (\u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 -0).<br \/>\n\u0412 <strong>ImageList<\/strong> \u0447\u0435\u0440\u0435\u0437 <strong>Add<\/strong> \u0437\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u043a\u043e\u043d\u043a\u0438, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0432\u0435, \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u0441\u0438\u043b\u0443\u044d\u0442\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f: \u0432 \u0431\u0435\u043b\u043e\u043c \u2013 \u043f\u043e\u043c\u0435\u0442\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0432 \u043a\u0440\u0430\u0441\u043d\u043e\u043c \u2013 \u043f\u043e\u043c\u0435\u0442\u043a\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0432 <strong>ServerSocket<\/strong> \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <strong>OnClientRead<\/strong>, \u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u0435\u043d, \u0432\u0435\u0434\u044c \u0434\u043b\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 (\u043a\u0442\u043e \u043f\u0440\u0438\u0441\u043b\u0430\u043b) \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u201c\u043f\u0440\u0438\u0435\u043c\\\u043e\u0442\u0432\u0435\u0442\u201d \u0438 \u0440\u0435\u0448\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f. \u0413\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435 \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0446\u0438\u043a\u043b \u043f\u043e \u0447\u0438\u0441\u043b\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0435\u0434\u0435\u0442\u0441\u044f \u201c\u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u043d\u0438\u0435\u201d \u0432\u0441\u0435\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430, \u0435\u0441\u043b\u0438 \u043e\u043d \u043f\u0440\u0438\u0448\u0435\u043b \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b, \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u0439 \u0437\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c. \u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u201c\u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u043d\u0438\u044f\u201d \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0442\u0435\u043b\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430, \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b (<strong>Interval<\/strong>) \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 (\u0434\u043b\u044f \u0447\u0430\u0442\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e 500 \u043c\u0441, \u0434\u043b\u044f \u0438\u0433\u0440 \u043d\u0443\u0436\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435). \u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0431\u0449\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043e\u043f\u0440\u043e\u0441\u0430:<\/p>\n<p><code>procedure TForm1.Timer1Timer(Sender: TObject);<br \/>\nbegin<br \/>\n\/\/ \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432<br \/>\nif ServerSocket.Socket.ActiveConnections&lt;&gt;0 then<br \/>\nbegin<br \/>\n\/\/ \u0446\u0438\u043a\u043b \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043a\u0430\u043d\u0430\u043b\u0430\u043c<br \/>\nfor i:=1 to ServerSocket.Socket.ActiveConnections do<br \/>\nbegin<br \/>\n\/\/ \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u043f\u0430\u043a\u0435\u0442 (\u0435\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u0438\u0441\u043b\u0430\u043b\u0438, \u043f\u043e \u043f\u0430\u043a\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0439)<br \/>\ntext:=ServerSocket.Socket.Connections[i-1].ReceiveText();<br \/>\n\/\/ \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u0447\u0442\u043e \u043f\u0430\u043a\u0435\u0442 \u043d\u0435 \u043f\u0443\u0441\u0442<br \/>\nif text&lt;&gt;'' then<br \/>\nbegin<br \/>\n{\u0442\u0443\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0442\u0440\u043e\u043a\u0438, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u043a\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 (com) \u0438 \u043f\u0440.}<br \/>\n\/\/ \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434<br \/>\ncase com of<br \/>\n\u043a\u043e\u0434: begin<br \/>\n{\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430}<br \/>\nend;<br \/>\n\u043a\u043e\u0434: begin<br \/>\n{\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430}<br \/>\nend;<br \/>\n\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026.<br \/>\nend;<br \/>\nend;<br \/>\nend;<br \/>\nend;<br \/>\n\/\/ \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<br \/>\nif UpdDo=True then<br \/>\nbegin<br \/>\n{\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b}<br \/>\n\/\/ \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435<br \/>\nUpdDo:=False;<br \/>\nend;<br \/>\nend;<\/code><\/p>\n<p>\u0415\u0441\u043b\u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438, \u0447\u0442\u043e \u0446\u0438\u043a\u043b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0435\u0434\u0438\u043d\u0438\u0446\u044b, \u0430 \u0432 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0430\u043d\u0430\u043b\u0430 \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 [i-1] (\u0432\u043c\u0435\u0441\u0442\u043e \u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0441 \u043d\u0443\u043b\u044f \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <em><\/em>), \u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0440\u044f\u0434\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0441\u0435\u0440\u0432\u0435\u0440 \u0447\u0438\u0441\u043b\u0438\u0442\u0441\u044f \u043f\u043e\u0434 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u201c0\u201d, \u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u044b &#8212; \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u201c1\u201d. \u0422\u0430\u043a \u0436\u0435 \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u043d\u0430\u043b\u043e\u0432 (<strong>ServerSocket.Socket.ActiveConnections<\/strong>) \u0441 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430\u043c\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.<br \/>\n\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432 \u0442\u0435\u043b\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f. \u042d\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u201c\u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u043d\u0438\u044f\u201d \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432, \u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 (\u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430).<br \/>\n\u0414\u0430\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\u043c \u041a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0434\u043b\u044f \u0438\u0433\u0440.<\/p>\n<p><strong>\u0412\u041d\u0418\u041c\u0410\u041d\u0418\u0415!<\/strong> \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d\u044b \u0432 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0430\u043c\u0438 \u043a\u043e\u0434\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432 \u0446\u0438\u043a\u043b\u0435 \u201c\u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u043d\u0438\u044f\u201d \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432, \u0442\u043e \u0412\u0421\u0415\u0413\u0414\u0410 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0439\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>Try..Except..End;<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u0432\u0435\u0434\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u043e\u0441\u0442\u044c \u0446\u0438\u043a\u043b\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e\u0439. \u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<p><code>Try<br \/>\n{\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430}<br \/>\nExcept<br \/>\n\/\/ \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0438 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f<br \/>\nEnd;<\/code><\/p>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0447\u0430\u0442\u0430 \u0438 \u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430\u043c. \u041a\u0430\u043a \u0438 \u043f\u0440\u0435\u0436\u0434\u0435, \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u043d\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u0432\u043e\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u043f\u043e\u043b\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<br \/>\n\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f, \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0442\u0430\u043a \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435:<\/p>\n<p><code>Type<br \/>\nTUserList = object<br \/>\nStatus: Byte;    \/\/ 1 - \u0441\u0435\u0440\u0432\u0435\u0440, 2 - \u043a\u043b\u0438\u0435\u043d\u0442<br \/>\nRec: Boolean;    \/\/ \u043e\u0442\u043c\u0435\u0442\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0441\u043f\u0438\u0441\u043e\u043a<br \/>\nName: String;    \/\/ \u0438\u043c\u044f (\u043d\u0438\u043a)<br \/>\nImage: Byte;     \/\/ \u0438\u043d\u0434\u0435\u043a\u0441 \u0438\u043a\u043e\u043d\u043a\u0438<br \/>\nend;<\/code><\/p>\n<p>\u0412\u043e\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435:<\/p>\n<p><code>var<br \/>\nForm1: TForm1;<br \/>\ni, j, com, ContList: Byte;<br \/>\nlen, pos, x: Word;<br \/>\ntext, StrUserList: String;<br \/>\nUpdDo: Boolean;<br \/>\nBuf: array[0..3] of Byte;<br \/>\nUserMas: array[0..255] of TUserList; \/\/\u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432<br \/>\nUItems: TListItem;<\/code><\/p>\n<p>\u041e\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 <strong>OnCreate<\/strong> \u0444\u043e\u0440\u043c\u044b:<\/p>\n<p><code>procedure TForm1.FormCreate(Sender: TObject);<br \/>\nbegin<br \/>\n\/\/ \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0444\u043e\u0440\u043c\u044b<br \/>\nCaption:='\u041c\u043d\u043e\u0433\u043e\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0447\u0430\u0442';<br \/>\nApplication.Title:=Caption;<br \/>\n\/\/ \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u0442\u0430<br \/>\nPortEdit.Text:='7777';<br \/>\n\/\/ \u0430\u0434\u0440\u0435\u0441 \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u041f\u041a (\"\u0441\u0430\u043c \u043d\u0430 \u0441\u0435\u0431\u044f\")<br \/>\nHostEdit.Text:='127.0.0.1';<br \/>\n\/\/ \u0432\u0432\u0435\u0434\u0435\u043c \u043d\u0438\u043a \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0447\u0438\u0441\u0442\u0438\u043c<br \/>\nNikEdit.Text:='\u0410\u043d\u0430\u043d\u0438\u043c';<br \/>\nTextEdit.Clear;<br \/>\nChatMemo.Lines.Clear;<br \/>\nend;<\/code><\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u201c\u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u043d\u0438\u044f\u201d \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p><code>procedure TForm1.ServerTimerTimer(Sender: TObject);<br \/>\nbegin<br \/>\n\/\/ \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432<br \/>\nif ServerSocket.Socket.ActiveConnections&lt;&gt;0 then<br \/>\nbegin<br \/>\n\/\/ \u0446\u0438\u043a\u043b \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043a\u0430\u043d\u0430\u043b\u0430\u043c<br \/>\nfor i:=1 to ServerSocket.Socket.ActiveConnections do<br \/>\nbegin<br \/>\n\/\/ \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u043f\u0430\u043a\u0435\u0442 (\u0435\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u0438\u0441\u043b\u0430\u043b\u0438, \u043f\u043e \u043f\u0430\u043a\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0439)<br \/>\ntext:=ServerSocket.Socket.Connections[i-1].ReceiveText();<br \/>\n\/\/ \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u0447\u0442\u043e \u043f\u0430\u043a\u0435\u0442 \u043d\u0435 \u043f\u0443\u0441\u0442<br \/>\nif text&lt;&gt;'' then<br \/>\nbegin<br \/>\n\/\/ \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043a\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0434\u043b\u0438\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0438<br \/>\ncom:=StrToInt(Copy(text,1,1));<br \/>\nlen:=Length(text)-1;<br \/>\n\/\/ \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434<br \/>\ncase com of<br \/>\n\/\/ \u043a\u043e\u0434 \u043f\u0440\u0438\u0435\u043c\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f<br \/>\n0: begin<br \/>\n\/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 ChatMemo \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430<br \/>\nChatMemo.Lines.Add(Copy(text,2,len));<br \/>\n\/\/ \u0440\u0430\u0437\u043e\u0448\u043b\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c (\u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043a\u0442\u043e \u043f\u0440\u0438\u0441\u043b\u0430\u043b)<br \/>\nfor j:=0 to ServerSocket.Socket.ActiveConnections-1 do<br \/>\nbegin<br \/>\nif (j+1)&lt;&gt;i then ServerSocket.Socket.Connections[j].SendText('0'+Copy(text,2,len));<br \/>\nend;<br \/>\nend;<br \/>\n\/\/ \u043a\u043e\u0434 \u043f\u0440\u0438\u0435\u043c\u0430 \u043d\u0438\u043a\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430<br \/>\n1: begin<br \/>\n\/\/ \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u0438\u043a<br \/>\nUserMas<em><\/em>.Name:=Copy(text,2,len);<br \/>\n\/\/ \u043e\u0442\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u0432 \u0441\u043f\u0438\u0441\u043e\u043a<br \/>\nUserMas<em><\/em>.Rec:=True;<br \/>\n\/\/ \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a<br \/>\nUpdateUserList;<br \/>\nend;<br \/>\nend;<br \/>\nend;<br \/>\nend;<br \/>\nend;<br \/>\n\/\/ \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<br \/>\nif UpdDo=True then<br \/>\nbegin<br \/>\n\/\/ \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<br \/>\nUpdateUserMas;<br \/>\n\/\/ \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<br \/>\nUpdateUserList;<br \/>\n\/\/ \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435<br \/>\nUpdDo:=False;<br \/>\nend;<br \/>\nend;<\/code><\/p>\n<p>\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 \u0440\u0435\u0436\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0435\u0439 \u201c\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u201d (<strong>ServerBtn<\/strong>). \u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043d\u0430 \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 <strong>ServerBtn<\/strong> (<strong>OnClick<\/strong>):<\/p>\n<p><code>procedure TForm1.ServerBtnClick(Sender: TObject);<br \/>\nbegin<br \/>\nif ServerBtn.Tag=0 then<br \/>\nbegin<br \/>\n\/\/ \u043a\u043b\u0430\u0432\u0438\u0448\u0443 ClientBtn \u0438 \u043f\u043e\u043b\u044f HostEdit, PortEdit, NikEdit \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c<br \/>\nClientBtn.Enabled:=False;<br \/>\nHostEdit.Enabled:=False;<br \/>\nPortEdit.Enabled:=False;<br \/>\nNikEdit.Enabled:=False;<br \/>\n\/\/ \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 \u0432 ServerSocket<br \/>\nServerSocket.Port:=StrToInt(PortEdit.Text);<br \/>\n\/\/ \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440<br \/>\nServerSocket.Active:=True;<br \/>\n\/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 ChatMemo \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f<br \/>\nChatMemo.Lines.Add('['+TimeToStr(Time)+']  \u0421\u0435\u0440\u0432\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u043d.');<br \/>\n\/\/ \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0442\u044d\u0433<br \/>\nServerBtn.Tag:=1;<br \/>\n\/\/ \u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430\u0434\u043f\u0438\u0441\u044c \u043a\u043b\u0430\u0432\u0438\u0448\u0438<br \/>\nServerBtn.Caption:='\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440';<br \/>\n\/\/ \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u0439\u043c\u0435\u0440 \u0441\u0435\u0440\u0432\u0435\u0440\u0430<br \/>\nServerTimer.Enabled:=True;<br \/>\n\/\/ \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0430<br \/>\nUserMas[0].Status:=1;<br \/>\nUserMas[0].Rec:=True;<br \/>\nUserMas[0].Name:=NikEdit.Text;<br \/>\nUserMas[0].Image:=1;<br \/>\n\/\/ \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435<br \/>\nUpdDo:=True;<br \/>\nend<br \/>\nelse<br \/>\nbegin<br \/>\n\/\/ \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u0439\u043c\u0435\u0440 \u0441\u0435\u0440\u0432\u0435\u0440\u0430<br \/>\nServerTimer.Enabled:=False;<br \/>\n\/\/ \u0441\u0442\u0438\u0440\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0430<br \/>\nUserMas[0].Status:=0;<br \/>\nUserMas[0].Rec:=False;<br \/>\nUserMas[0].Name:='\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439';<br \/>\nUserMas[0].Image:=0;<br \/>\n\/\/ \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435<br \/>\nUpdDo:=True;<br \/>\n\/\/ \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432<br \/>\nUserListView.Items.Clear;<br \/>\n\/\/ \u043a\u043b\u0430\u0432\u0438\u0448\u0443 ClientBtn \u0438 \u043f\u043e\u043b\u044f HostEdit, PortEdit, NikEdit \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c<br \/>\nClientBtn.Enabled:=True;<br \/>\nHostEdit.Enabled:=True;<br \/>\nPortEdit.Enabled:=True;<br \/>\nNikEdit.Enabled:=True;<br \/>\n\/\/ \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440<br \/>\nServerSocket.Active:=False;<br \/>\n\/\/ \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 ChatMemo<br \/>\nChatMemo.Lines.Add('['+TimeToStr(Time)+']  \u0421\u0435\u0440\u0432\u0435\u0440 \u0437\u0430\u043a\u0440\u044b\u0442.');<br \/>\n\/\/ \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0442\u044d\u0433\u0443 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<br \/>\nServerBtn.Tag:=0;<br \/>\n\/\/ \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u043d\u0430\u0434\u043f\u0438\u0441\u044c \u043a\u043b\u0430\u0432\u0438\u0448\u0438<br \/>\nServerBtn.Caption:='\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440';<br \/>\nend;<br \/>\nend;<\/code><\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0438\u0434\u0443\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 <strong>ServerSocket<\/strong>\u2019\u0430. \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443, \u043a\u043e\u0433\u0434\u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043b\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 (<strong>OnClientConnect<\/strong>):<\/p>\n<p><code>procedure TForm1.ServerSocketClientConnect(Sender: TObject;<br \/>\nSocket: TCustomWinSocket);<br \/>\nbegin<br \/>\n\/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 ChatMemo \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430<br \/>\nChatMemo.Lines.Add('['+TimeToStr(Time)+']  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442.');<br \/>\n\/\/ \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435<br \/>\nUpdDo:=True;<br \/>\nend;<\/code><\/p>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443, \u043a\u043e\u0433\u0434\u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f (<strong>OnClientDisconnect<\/strong>):<\/p>\n<p><code>procedure TForm1.ServerSocketClientDisconnect(Sender: TObject;<br \/>\nSocket: TCustomWinSocket);<br \/>\nbegin<br \/>\n\/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 ChatMemo \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430<br \/>\nChatMemo.Lines.Add('['+TimeToStr(Time)+']  \u041a\u043b\u0438\u0435\u043d\u0442 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f.');<br \/>\n\/\/ \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435<br \/>\nUpdDo:=True;<br \/>\nend;<\/code><\/p>\n<p>\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u0423 \u043d\u0430\u0441 \u043e\u043d\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0436\u0430\u0442\u0438\u0435\u043c \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u201c\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u201d (<strong>SendBtn<\/strong>), \u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442. \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0435\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 (<strong>OnClick<\/strong>):<\/p>\n<p><code>procedure TForm1.SendBtnClick(Sender: TObject);<br \/>\nbegin<br \/>\n\/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0432 \u043a\u0430\u043a\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430<br \/>\nif ServerSocket.Active=True then<br \/>\n\/\/ \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432\u0441\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c<br \/>\nfor i:=0 to ServerSocket.Socket.ActiveConnections-1 do<br \/>\nServerSocket.Socket.Connections<em><\/em>.SendText('0['+TimeToStr(Time)+']  '+NikEdit.Text+':  '+TextEdit.Text)<br \/>\nelse<br \/>\n\/\/ \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0430<br \/>\nClientSocket.Socket.SendText('0['+TimeToStr(Time)+']  '+NikEdit.Text+':  '+TextEdit.Text);<br \/>\n\/\/ \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 ChatMemo<br \/>\nChatMemo.Lines.Add('['+TimeToStr(Time)+']  '+NikEdit.Text+':  '+TextEdit.Text);<br \/>\n\/\/ \u043e\u0447\u0438\u0449\u0430\u0435\u043c TextEdit<br \/>\nTextEdit.Clear;<br \/>\nend;<\/code><\/p>\n<p>\u0420\u0435\u0436\u0438\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u201c\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f\u201d (<strong>ClientBtn<\/strong>), \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f <strong>ServerBtn<\/strong> \u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442\u0441\u044f <strong>ClientSocket<\/strong>. \u0412\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 <strong>ClientBtn<\/strong> (<strong>OnClick<\/strong>):<\/p>\n<p><code>procedure TForm1.ClientBtnClick(Sender: TObject);<br \/>\nbegin<br \/>\nif ClientBtn.Tag=0 then<br \/>\nbegin<br \/>\n\/\/ \u043a\u043b\u0430\u0432\u0438\u0448\u0443 ServerBtn \u0438 \u043f\u043e\u043b\u044f HostEdit, PortEdit \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c<br \/>\nServerBtn.Enabled:=False;<br \/>\nHostEdit.Enabled:=False;<br \/>\nPortEdit.Enabled:=False;<br \/>\n\/\/ \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 \u0432 ClientSocket<br \/>\nClientSocket.Port:=StrToInt(PortEdit.Text);<br \/>\n\/\/ \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0445\u043e\u0441\u0442 \u0438 \u0430\u0434\u0440\u0435\u0441 (\u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 HostEdit \u0432 \u043e\u0431\u0430)<br \/>\nClientSocket.Host:=HostEdit.Text;<br \/>\nClientSocket.Address:=HostEdit.Text;<br \/>\n\/\/ \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0430<br \/>\nClientSocket.Active:=True;<br \/>\n\/\/ \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0442\u044d\u0433<br \/>\nClientBtn.Tag:=1;<br \/>\n\/\/ \u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430\u0434\u043f\u0438\u0441\u044c \u043a\u043b\u0430\u0432\u0438\u0448\u0438<br \/>\nClientBtn.Caption:='\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f';<br \/>\nend<br \/>\nelse<br \/>\nbegin<br \/>\n\/\/ \u043a\u043b\u0430\u0432\u0438\u0448\u0443 ServerBtn \u0438 \u043f\u043e\u043b\u044f HostEdit, PortEdit \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c<br \/>\nServerBtn.Enabled:=True;<br \/>\nHostEdit.Enabled:=True;<br \/>\nPortEdit.Enabled:=True;<br \/>\n\/\/ \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0430<br \/>\nClientSocket.Active:=False;<br \/>\n\/\/ \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432<br \/>\nUserListView.Items.Clear;<br \/>\n\/\/ \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 ChatMemo<br \/>\nChatMemo.Lines.Add('['+TimeToStr(Time)+']  \u0421\u0435\u0441\u0441\u0438\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u0430.');<br \/>\n\/\/ \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0442\u044d\u0433\u0443 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<br \/>\nClientBtn.Tag:=0;<br \/>\n\/\/ \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u043d\u0430\u0434\u043f\u0438\u0441\u044c \u043a\u043b\u0430\u0432\u0438\u0448\u0438<br \/>\nClientBtn.Caption:='\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f';<br \/>\nend;<br \/>\nend;<\/code><\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043d\u0430 <strong>OnConnect<\/strong>, <strong>OnDisconnect<\/strong>, <strong>OnRead<\/strong> \u043a\u043b\u0438\u0435\u043d\u0442\u0430 <strong>ClientSocket<\/strong>. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (<strong>OnRead<\/strong>):<\/p>\n<p><code>procedure TForm1.ClientSocketRead(Sender: TObject;<br \/>\nSocket: TCustomWinSocket);<br \/>\nbegin<br \/>\n\/\/ \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u0435\u043a\u0441\u0442, \u043a\u043e\u0434 \u043a\u043e\u043c\u043c\u0430\u043d\u0434\u044b, \u0434\u043b\u0438\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0438<br \/>\ntext:=Socket.ReceiveText();<br \/>\ncom:=StrToInt(Copy(text,1,1));<br \/>\nlen:=Length(text)-1;<br \/>\n\/\/ \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043c\u0430\u043d\u0434<br \/>\ncase com of<br \/>\n\/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 ChatMemo \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430<br \/>\n0: ChatMemo.Lines.Add(Copy(text,2,len));<br \/>\n\/\/ \u043e\u0442\u043e\u0448\u043b\u0435\u043c \u0441\u0432\u043e\u0439 \u043d\u0438\u043a \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440<br \/>\n1: ClientSocket.Socket.SendText('1'+NikEdit.Text);<br \/>\n\/\/ \u043f\u0440\u0438\u043c\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<br \/>\n2: begin<br \/>\n\/\/ \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432<br \/>\nUserListView.Items.Clear;<br \/>\n\/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043b\u044e\u0447 \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 (\u0442.\u043a. \u0432\u044b\u0440\u0435\u0437\u043a\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439)<br \/>\ntext:=text+Chr(152);<br \/>\n\/\/ \u0443\u043a\u0430\u0436\u0435\u043c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b<br \/>\npos:=2;<br \/>\n\/\/ \u043e\u0431\u043d\u0443\u043b\u0438\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432<br \/>\nx:=0;<br \/>\n\/\/ \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u043c \u043f\u043e \u0434\u043b\u0438\u043d\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u043f\u0438\u0441\u043a\u0430<br \/>\nfor j:=2 to len+1 do<br \/>\nbegin<br \/>\n\/\/ \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0441\u0434\u0432\u0438\u0433<br \/>\nx:=x+1;<br \/>\n\/\/ \u0435\u0441\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d \u043a\u043b\u044e\u0447 (\u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0438\u043a\u043e\u0432 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435)<br \/>\nif Copy(text,j,1)=Chr(152) then<br \/>\nbegin<br \/>\n\/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 UserListView \u0441\u0442\u0440\u043e\u043a\u0443<br \/>\nUItems:=UserListView.Items.Add;<br \/>\nUItems.Caption:=Copy(text,pos,x-1);<br \/>\n\/\/ \u0443\u043a\u0430\u0436\u0435\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0438\u043a\u043e\u043d\u043a\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<br \/>\nif pos&gt;2 then UItems.ImageIndex:=0 else UItems.ImageIndex:=1;<br \/>\n\/\/ \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0441\u043f\u0438\u0441\u043a\u0430<br \/>\npos:=j+1;<br \/>\n\/\/ \u043e\u0431\u043d\u0443\u043b\u0438\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432<br \/>\nx:=0;<br \/>\nend;<br \/>\nend;<br \/>\nend;<br \/>\nend;<br \/>\nend;<\/code><\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e, \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 <strong>ChatMemo<\/strong> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:<\/p>\n<p><code>procedure TForm1.ClientSocketConnect(Sender: TObject;<br \/>\nSocket: TCustomWinSocket);<br \/>\nbegin<br \/>\n\/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 ChatMemo \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c<br \/>\nChatMemo.Lines.Add('['+TimeToStr(Time)+'] \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443.');<br \/>\nend;<\/code><\/p>\n<p><code>procedure TForm1.ClientSocketDisconnect(Sender: TObject;<br \/>\nSocket: TCustomWinSocket);<br \/>\nbegin<br \/>\n\/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 ChatMemo \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u043f\u043e\u0442\u0435\u0440\u0435 \u0441\u0432\u044f\u0437\u0438<br \/>\nChatMemo.Lines.Add('['+TimeToStr(Time)+'] \u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d.');<br \/>\nend;<\/code><\/p>\n<p>\u0425\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u0445 \u0443 \u043d\u0430\u0441 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432, \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0435\u0433\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p><code>procedure TForm1.UpdateUserMas;<br \/>\nbegin<br \/>\n\/\/ \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439<br \/>\nfor i:=1 to 255 do<br \/>\nbegin<br \/>\nUserMas<em><\/em>.Status:=0;<br \/>\nUserMas<em><\/em>.Rec:=False;<br \/>\nUserMas<em><\/em>.Name:='\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439';<br \/>\nUserMas<em><\/em>.Image:=0;<br \/>\nend;<br \/>\n\/\/ \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<br \/>\nif ServerSocket.Socket.ActiveConnections&lt;&gt;0 then<br \/>\nbegin<br \/>\nfor i:=1 to ServerSocket.Socket.ActiveConnections do<br \/>\nbegin<br \/>\nUserMas<em><\/em>.Status:=2;<br \/>\nUserMas<em><\/em>.Name:='\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439';<br \/>\nUserMas<em><\/em>.Image:=0;<br \/>\n\/\/ \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0438\u043c\u044f (\u043d\u0438\u043a) \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e \u0435\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0443 (\u043a\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b - 1)<br \/>\nServerSocket.Socket.Connections[i-1].SendText('1');<br \/>\nend;<br \/>\nend;<br \/>\nend;<\/code><\/p>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a <strong>UserListView<\/strong> \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435:<\/p>\n<p><code>procedure TForm1.UpdateUserList;<br \/>\nbegin<br \/>\n\/\/ \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432<br \/>\nUserListView.Items.Clear;<br \/>\n\/\/ \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e<br \/>\nStrUserList:='';<br \/>\n\/\/ \u043e\u0431\u043d\u0443\u043b\u044f\u0435\u043c \u043f\u043e\u043c\u0435\u0442\u043a\u0443 \u0437\u0430\u043f\u0438\u0441\u0438<br \/>\nContList:=0;<br \/>\n\/\/ \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u043c \u043f\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0443 \u043a\u0430\u043d\u0430\u043b\u043e\u0432<br \/>\nfor i:=0 to 255 do<br \/>\nbegin<br \/>\n\/\/ \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0435 \u043f\u0443\u0441\u0442\u0430\u044f<br \/>\nif UserMas<em><\/em>.Status&lt;&gt;0 then<br \/>\nbegin<br \/>\n\/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 UserListView \u0441\u0442\u0440\u043e\u043a\u0443<br \/>\nUItems:=UserListView.Items.Add;<br \/>\nUItems.Caption:=UserMas<em><\/em>.Name;<br \/>\nUItems.ImageIndex:=UserMas<em><\/em>.Image;<br \/>\n\/\/ \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043d<br \/>\nif UserMas<em><\/em>.Rec=False then ContList:=1;<br \/>\n\/\/ \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<br \/>\nStrUserList:=StrUserList+UserMas<em><\/em>.Name+Chr(152);<br \/>\nend;<br \/>\nend;<br \/>\n\/\/ \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043e\u0442\u043c\u0435\u0442\u0438\u043b\u0438\u0441\u044c, \u0438 \u0435\u0441\u0442\u044c \u0445\u043e\u0442\u044c \u043e\u0434\u0438\u043d \u043a\u0430\u043d\u0430\u043b<br \/>\nif (ContList=0) and (ServerSocket.Socket.ActiveConnections&lt;&gt;0) then<br \/>\nbegin<br \/>\n\/\/ \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u043c \u043f\u043e \u0432\u0441\u0435\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043a\u0430\u043d\u0430\u043b\u0430\u043c<br \/>\nfor i:=0 to ServerSocket.Socket.ActiveConnections-1 do<br \/>\nbegin<br \/>\n\/\/ \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 (\u043a\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b - 2)<br \/>\nServerSocket.Socket.Connections<em><\/em>.SendText('2'+StrUserList);<br \/>\nend;<br \/>\nend;<br \/>\nend;<\/code><\/p>\n<p align=\"left\"><a href=\"http:\/\/pblog.ru\/wp-content\/uploads\/Multy-useronline_chat.rar\">\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0437\u0434\u0435\u0441\u044c.<\/a><\/p>\n<p>\u0412\u043e\u0442, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0438 \u0432\u0441\u0435. \u041d\u0435 \u0431\u043e\u0439\u0442\u0435\u0441\u044c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c. \u0423\u0434\u0430\u0447\u0438!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 (\u201c\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u0430\u201d) \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0433\u043e \u0447\u0430\u0442\u0430 \u043d\u0430 \u0434\u0432\u043e\u0438\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0447\u0430\u0442\u0430 \u201chead-to-head\u201d \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430, \u0432\u0435\u0434\u044c \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043a\u0430\u043d\u0430\u043b, \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440, \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u2013 \u043a\u043b\u0438\u0435\u043d\u0442. Multy-user-\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u0415\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u0421\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u0442 \u0438\u0445 \u043f\u043e \u043d\u0443\u0436\u043d\u044b\u043c \u043a\u0430\u043d\u0430\u043b\u0430\u043c, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 [&hellip;]<\/p>\n","protected":false},"author":61,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3,4],"tags":[56,54,55,42,52,53,51],"_links":{"self":[{"href":"http:\/\/pblog.ru\/index.php?rest_route=\/wp\/v2\/posts\/100"}],"collection":[{"href":"http:\/\/pblog.ru\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/pblog.ru\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/pblog.ru\/index.php?rest_route=\/wp\/v2\/users\/61"}],"replies":[{"embeddable":true,"href":"http:\/\/pblog.ru\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=100"}],"version-history":[{"count":0,"href":"http:\/\/pblog.ru\/index.php?rest_route=\/wp\/v2\/posts\/100\/revisions"}],"wp:attachment":[{"href":"http:\/\/pblog.ru\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/pblog.ru\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=100"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/pblog.ru\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}