{"id":337791,"date":"2022-09-01T15:00:39","date_gmt":"2022-09-01T15:00:39","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=337791"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=337791","title":{"rendered":"<span>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0437\u0430 \u0434\u0435\u043d\u044c<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/14a\/4a0\/a17\/14a4a0a17e21135f8aba4f0321308de5.gif\" width=\"463\" height=\"304\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/14a\/4a0\/a17\/14a4a0a17e21135f8aba4f0321308de5.gif\"\/><figcaption><\/figcaption><\/figure>\n<p><em>\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435<\/em><\/p>\n<p>\u041a\u0430\u043a-\u0442\u043e \u0440\u0430\u0437 \u043e\u0442\u043a\u043b\u0438\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u044e \u0421++ \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0441 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0432\u0438\u043b\u043a\u043e\u0439 \u043e\u0442 \u0441\u043e\u0440\u043e\u043a\u0430 \u0434\u043e \u0441\u0442\u043e \u0432\u043e\u0441\u044c\u043c\u0438\u0434\u0435\u0441\u044f\u0442\u0438 \u0442\u044b\u0441\u044f\u0447 \u0432 \u0441\u0432\u043e\u0435\u043c \u0440\u0435\u0433\u0438\u043e\u043d\u0435. \u0414\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0438\u043c\u0435\u043b \u043e\u043f\u044b\u0442\u0430 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043c\u043d\u0435 \u0432 \u043e\u0442\u0432\u0435\u0442 \u043f\u0440\u0438\u0441\u043b\u0430\u043b\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435. \u0422\u0430\u043c \u0431\u044b\u043b\u043e \u0442\u0440\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0434\u0432\u0435. \u041a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u044f \u043b\u044e\u0431\u0438\u043c\u0430\u044f \u0440\u0443\u0431\u0440\u0438\u043a\u0430 \u2013 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043e\u0434\u043d\u0443 \u0438\u0437 \u043d\u0438\u0445.<\/p>\n<p><em>1.\u00a0\u00a0\u00a0\u00a0\u00a0 \u0417\u0430\u0434\u0430\u0447\u0430<\/em><\/p>\n<p>\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c. <\/p>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 Github \u0438 \u043f\u0440\u0438\u0441\u043b\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0438. \u041d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u043b\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b.<\/p>\n<p>\u0422\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 1. \u042f\u0437\u044b\u043a \u0421++. \u0421\u0440\u0435\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 Visual Studio 2019.<\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430. \u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c 2 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Client.exe \u0438 Server.exe \u043f\u043e\u0434 Windows, \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 UPD \u0441\u043e\u043a\u0435\u0442 \u0441 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u043f\u043e TCP.<\/p>\n<p>1.\u0421\u0435\u0440\u0432\u0435\u0440. Server.exe<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u2013 IP, \u0432\u0442\u043e\u0440\u043e\u0439 \u043d\u043e\u043c\u0435\u0440 \u043f\u043e\u0440\u0442\u0430, \u0442\u0440\u0435\u0442\u0438\u0439 \u2013 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<p>\u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u0442\u044c \u043f\u043e IP \u0430\u0434\u0440\u0435\u0441\u0443 \u043f\u043e\u0440\u0442 \u0438 \u0436\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043f\u043e TCP.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<p>Server.exe 127.0.0.1 5555 temp<\/p>\n<p>1.\u00a0\u00a0\u00a0\u00a0\u00a0 \u041a\u043b\u0438\u0435\u043d\u0442. Client.exe<\/p>\n<p>\u0421\u0442\u0430\u0440\u0442 \u0441 5 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438.<\/p>\n<p>1 \u0438 2 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u2013 IP \u0430\u0434\u0440\u0435\u0441 \u0438 \u043f\u043e\u0440\u0442 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443. \u0422\u0440\u0435\u0442\u0438\u0439 \u2013 \u043f\u043e\u0440\u0442 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 UDP \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u0427\u0435\u0442\u0432\u0435\u0440\u0442\u044b\u0439 \u2013 \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443. \u041f\u044f\u0442\u044b\u0439 \u2013 \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u043d\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 UDP \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440<\/p>\n<p>Client.exe 127.0.0.1 5555 6000 test.txt 500<\/p>\n<p>3.\u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.<\/p>\n<p>\u041f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 TCP \u0441\u043e\u043a\u0435\u0442 \u0441 IP \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0438 \u043f\u043e\u0440\u0442\u043e\u043c \u0438\u0437 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432(1 \u0438 2 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b), \u0431\u0435\u0440\u0435\u0442 \u0435\u0433\u043e \u043d\u0430 \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.<\/p>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043f\u043e TCP \u043d\u0430 IP \u0430\u0434\u0440\u0435\u0441 \u0438 \u043f\u043e\u0440\u0442 \u0438\u0437 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 (1 \u0438 2 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b ) \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0444\u0430\u0439\u043b (3 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 10 \u041c\u0431.) \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e TCP \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044e \u0438\u043c\u044f \u0444\u0430\u0439\u043b \u0438 \u043f\u043e\u0440\u0442 UDP \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440. <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0444\u0430\u0439\u043b \u0431\u043b\u043e\u043a\u0430\u043c\u0438 (\u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 udp \u043f\u0430\u043a\u0435\u0442\u0430\u0445 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u0432\u043e\u0439 id)\u00a0 udp \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043f\u043e TCP \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043e \u043f\u0440\u0438\u0435\u043c\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c. <\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 (5 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440) \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0430\u043a\u0435\u0442, \u0442\u043e \u043f\u0430\u043a\u0435\u0442 \u043f\u043e udp \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u044b \u043a\u043b\u0438\u0435\u043d\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 TCP \u043e\u0431 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0444\u0430\u0439\u043b\u0430,<\/p>\n<p>\u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 TCP \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443.<\/p>\n<p>\u0421\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043f\u043e \u0422\u0421P, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0438 \u043f\u043e\u0440\u0442\u0430 udp \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 udp \u0441\u043e\u043a\u0435\u0442 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c udp \u043f\u0430\u043a\u0435\u0442\u044b \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441 IP \u0430\u0434\u0440\u0435\u0441\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u043f\u043e\u0440\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c.<\/p>\n<p>\u041d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 udp \u043f\u0430\u043a\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 tcp \u0441\u043e\u043a\u0435\u0442 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 (\u0432\u0441\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u044b \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435) \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0444\u0430\u0439\u043b \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 (3 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440).<\/p>\n<p>\u0424\u043e\u0440\u043c\u0430\u0442 \u043f\u043e\u0441\u044b\u043b\u043e\u043a \u043f\u043e TCP (\u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430, \u043f\u043e\u0440\u0442 \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432) &#8212; \u043d\u0430 \u0432\u0430\u0448\u0435 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435<\/p>\n<p>\u0444\u043e\u0440\u043c\u0430\u0442 \u0438 \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044f \u0431\u043b\u043e\u043a\u043e\u0432 \u0434\u043b\u044f udp \u043f\u0430\u043a\u0435\u0442\u043e\u0432 &#8212; \u043d\u0430 \u0432\u0430\u0448\u0435 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435<\/p>\n<p><em>2.\u00a0\u00a0\u00a0\u00a0\u00a0 \u0420\u0435\u0448\u0435\u043d\u0438\u0435<\/em><\/p>\n<p>\u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u2013 \u0442\u043e \u043e\u043d\u0430 \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0430 \u2013 \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u0438\u0445 \u0442\u0430\u043c \u00ab\u0431\u0435\u043b\u044b\u0445 \u043f\u044f\u0442\u0435\u043d\u00bb. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043a\u043e\u0434\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u044f.<\/p>\n<p><em>\u041a\u043e\u0434 \u043a\u043b\u0438\u0435\u043d\u0442\u0430<\/em>   <\/p>\n<pre><code class=\"cpp\">#include &lt;iostream> #include \"Connection.h\"\/\/\u041a\u043b\u0430\u0441\u0441 \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044b \u0441\u043e\u043a\u0435\u0442\u044b #include &lt;fstream> #include &lt;vector> #include &lt;string> int main(int argc,char*argv[]) {     if (argc == 1)     {         std::cout &lt;&lt; \"no flags argc!\" &lt;&lt; std::endl;         std::cout &lt;&lt; \"Usage: Client.exe &lt;ip> &lt;portTCP> &lt;portUDP> &lt;Filename> &lt;Timeout>\" &lt;&lt; std::endl;         exit(1);     }     Connection* con = new Connection(argv[5]);\/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0432 \u043d\u0435\u0433\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442     con->InitClient(argv[1], atoi(argv[2]),atoi(argv[3]));\/\/\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443(\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c ip \u0430\u0434\u0440\u0435\u0441,tcp \u043f\u043e\u0440\u0442 \u0438 udp \u043f\u043e\u0440\u0442     std::vector&lt;std::string> vecline;     std::string line;     std::ifstream in(argv[4]); \/\/ \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f     if (in.is_open())     {         int ch=0;         while((ch=in.get())!=EOF)         {             line += ch;             if (line.size() == 242)             {                 vecline.push_back(line);                 line = \"\";             }         }         if(line!=\"\")             vecline.push_back(line);     }     in.close();     \/\/ \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b     std::string path = argv[4];     std::string filename = path.substr(path.rfind('\\\\') + 1);\/\/\u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0438\u0437 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u043a \u0444\u0430\u0439\u043b\u0443     con->Send(argv[3]);\/\/\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 udp \u043f\u043e\u0440\u0442 \u0447\u0435\u0440\u0435\u0437 tcp     con->Send(filename);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430     con->Send(std::to_string(vecline.size()));\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043a\u043e\u043b-\u0432\u043e \u0441\u0442\u0440\u043e\u043a     std::cout &lt;&lt; \"Starting transmission\" &lt;&lt; std::endl;\/\/\u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443     std::string id = \"\";     for (int i = 0; i &lt; vecline.size(); i++)     {         id = \"Begin\";         if (i \/ 10.0 &lt; 1)             id += \"00000\";         else if((i\/100.0&lt;1) &amp;&amp; (i\/10.0>=1))             id += \"0000\";         else if ((i\/1000.0&lt;1) &amp;&amp; (i \/ 100.0 >= 1))             id += \"000\";         else if ((i \/ 10000.0 &lt; 1) &amp;&amp; (i \/ 1000.0 >= 1))             id += \"00\";         else if ((i \/ 100000.0 &lt; 1) &amp;&amp; (i \/ 10000.0 >= 1))             id += \"00\";         else if ((i \/ 1000000.0 &lt; 1) &amp;&amp; (i \/ 100000.0 >= 1))             id += \"00\";         else             id += \"0\";         id += std::to_string(i) + \"End\";         id += vecline[i]; \/\/\u043e\u0431\u0435\u0440\u0442\u044b\u0432\u0430\u0435\u043c udp \u043f\u0430\u043a\u0435\u0442 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 id \u0444\u043e\u0440\u043c\u0430\u0442\u0430 Begin000001EndData         con->SendUDP(id);\/\/\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c udp \u043f\u0430\u043a\u0435\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440         \/\/Sleep(1000);         con->Receive();\/\/\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 tcp         std::cout &lt;&lt; \"i\" &lt;&lt; i &lt;&lt; std::endl;         if ((i!=0) &amp;&amp; (i != atoi(con->GetBuffer())))\/\/\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u043f\u0430\u043a\u0435\u0442\u044b             i--;\/\/\u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0438\u0441\u044c \u043f\u043e \u0434\u043e\u0440\u043e\u0433\u0435 \u0442\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c i \u0438 \u043f\u043e \u0446\u0438\u043a\u043b\u0443 \u0441\u043e\u0441\u0442\u043e\u0438\u0442\u0441\u044f         id = \"\";\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430     }     con->ClientClose();     con->~Connection();     std::cout &lt;&lt; \"Done!\\n\"; }<\/code><\/pre>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0444\u0430\u0439\u043b(\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430) \u043f\u043e\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e &#8212; \u043f\u043e\u043a\u0430 \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0435\u0442 \u0434\u043b\u0438\u043d\u044b 242 \u0441\u0438\u043c\u0432\u043e\u043b\u0430. 14 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0434\u043b\u044f udp \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 . \u0412 \u0441\u0443\u043c\u043c\u0435 \u0431\u0443\u0434\u0435\u0442 256=buflen.<\/p>\n<p><em>\u041a\u043e\u0434 \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/em><\/p>\n<pre><code class=\"cpp\">#include &lt;iostream> #include \"Connection.h\" #include &lt;fstream> #include &lt;string> int main(int argc, char* argv[]) {     system(\"Del \\\"C:\\\\temp\\\\test.txt\\\"\");\/\/\u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043d\u0430\u0448 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u0435\u0441\u043b\u0438 \u043e\u043d \u0435\u0441\u0442\u044c     if (argc == 1)     {         std::cout &lt;&lt; \"no flags argc!\" &lt;&lt; std::endl;         std::cout &lt;&lt; \"Usage: Server.exe &lt;ip> &lt;port> &lt;Folder>\" &lt;&lt; std::endl;         exit(1);     }     std::string timeout_ = \"500\";\/\/\u0437\u0430\u0434\u0430\u0435\u043c \u0442\u0430\u0439\u043c\u0430\u0443\u0442     Connection* con = new Connection(timeout_.c_str());     con->InitServer(argv[1], atoi(argv[2]));\/\/\u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 TCP \u0441\u043e\u043a\u0435\u0442\u043e\u043c     con->ReceiveServer();\/\/\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043f\u043e\u0440\u0442\u043e\u043c udp \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430     int portudp = atoi(con->GetBuffer());     con->InitServerUDP(argv[1], portudp); \/\/\u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 UDP \u0441\u043e\u043a\u0435\u0442\u043e\u043c     con->ReceiveServer();\/\/\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430     std::string FileName = con->GetBuffer();     if (FileName.size() > FILENAME_MAX)         std::cout &lt;&lt; \"File name is so long\" &lt;&lt; std::endl;     con->ReceiveServer();\/\/\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u043b-\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u0432 \u0444\u0430\u0439\u043b\u0435     int j = atoi(con->GetBuffer());     int i = 0,jj;     std::string id = \"\";     std::cout &lt;&lt; \"Starting transmission\" &lt;&lt; std::endl;\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430     while (i &lt; j)     {         jj = 0;         con->ReceiveServerUDP();         while (con->GetVec()[i][jj++] != 'n')             ;         while (con->GetVec()[i][jj] != 'E')             id += con->GetVec()[i][jj++];\/\/\u043f\u0430\u0440\u0441\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0443         con->SendServer(id);\/\/\u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c id \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0443         std::cout &lt;&lt; \"i=\"&lt;&lt;i &lt;&lt; std::endl;         if (atoi(id.c_str()) == i) );\/\/\u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c id \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438         {             i++;               }         id = \"\";     }     std::cout &lt;&lt; \"Transmission is end\" &lt;&lt; std::endl;     std::ofstream out;          \/\/ \u043f\u043e\u0442\u043e\u043a \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438     std::string path = argv[3];     system(\"mkdir \\\"C:\\\\temp\\\\\\\"\");\/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e     path += '\\\\' + FileName;     if (path.size() > FILENAME_MAX)         std::cout &lt;&lt; \"File name is so long\" &lt;&lt; std::endl;     std::cout &lt;&lt; \"Creating file\" &lt;&lt; std::endl;     out.open(path); \/\/ \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438     if (out.is_open())     {         std::string strfile = \"\";         int jj;         for (int i = 0; i &lt; con->GetVec().size(); i++)         {             strfile = \"\";             jj = 0;             while (con->GetVec()[i][jj++] != 'd')                 ;             for (jj; jj &lt; con->GetVec()[i].size(); jj++)                 strfile += con->GetVec()[i][jj];\/\/\u0412\u044b\u0440\u0435\u0437\u0430\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 udp             out &lt;&lt;strfile;\/\/ \u0438 \u043f\u0438\u0448\u0435\u043c \u0432 \u0444\u0430\u0439\u043b         }         out.close();     }     con->ServerClose();     con->~Connection();     std::cout &lt;&lt; \"Done!\\n\"; }<\/code><\/pre>\n<p>\u0421\u0445\u0435\u043c\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/16d\/bca\/702\/16dbca7025301b6e13bf38a497b6e63a.jpg\" width=\"931\" height=\"547\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/16d\/bca\/702\/16dbca7025301b6e13bf38a497b6e63a.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c \u0436\u0435 \u043a\u043b\u0430\u0441\u0441\u0435 Connection \u00a0\u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u043e\u043a\u0435\u0442\u044b, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0447\u0442\u043e \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c \u2013 \u044d\u0442\u043e \u0432\u043e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b:<\/p>\n<p><em>\u0422\u0430\u0439\u043c\u0430\u0443\u0442\u044b:<\/em><\/p>\n<pre><code class=\"cpp\">struct timeval timeout;  timeout.tv_sec = 0; if(timeout_!=\"\")     timeout.tv_usec = atoi(timeout_); else     timeout.tv_usec = 500;<\/code><\/pre>\n<p>\u0418 \u0447\u0430\u0441\u0442\u0438 \u043a\u043e\u0434\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439(\u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u0438\u0435\u043c\u043e\u043c \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u2013 \u043e\u0434\u0438\u043d \u0440\u0430\u0437):<\/p>\n<pre><code class=\"cpp\">if (setsockopt(newsockfd, SOL_SOCKET, SO_SNDTIMEO, (char*)&amp;timeout, sizeof timeout) &lt; 0)             error(\"setsockopt failed\\n\");<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e tcp \u0441\u043e\u043a\u0435\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438<\/p>\n<pre><code class=\"cpp\">if (setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (char*)&amp;timeout, sizeof timeout) &lt; 0)             error(\"setsockopt failed\");<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e tcp \u0441\u043e\u043a\u0435\u0442\u0430 \u043f\u0440\u0438\u0435\u043c\u0430<\/p>\n<p>P.S. \u0421\u0447\u0438\u0442\u0430\u044e \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u043f\u043e\u043b\u043d\u044b\u043c, \u0435\u0441\u043b\u0438 \u044f \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044e \u043a\u043b\u0430\u0441\u0441 Connection \u0441 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u0433\u043b\u0430\u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c\u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b Connection.h<\/p>\n<pre><code class=\"cpp\">#pragma once #include &lt;iostream> #include &lt;stdlib.h> #include &lt;string.h> #include &lt;sys\/types.h> #include &lt;WinSock.h> #include &lt;fcntl.h> #pragma comment (lib,\"WS2_32.lib\") #pragma warning(disable : 4996) #include &lt;vector> class Connection { public:     Connection(const char* timeout);     int InitServer(const char* address, int port);     int ServerClose();     int Send(std::string line);     int Receive();     int SendUDP(std::string line);     int ReceiveUDP();     int InitClient(const char* address, int port,int udpport);     int ClientClose();     void bzero(char* buf, int l);     void error(const char* msg);     int SendServer(std::string line);     int ReceiveServer();     int ReceiveServerUDP();     int SendServerUDP();     char* GetBuffer();     std::vector&lt;std::string> GetVec();     int Block(bool block);     int BlockServer(bool block);     int InitServerUDP(const char* address, int port);     virtual ~Connection(); protected: private:     int sockfd, newsockfd,udpsocket;     int buflen;     char* buffer;     struct sockaddr_in serv_addr, cli_addr,serv_addr_udp,cli_addr_udp;     int clilen;     int servlen;     int n;     std::string strFile,strCli;     std::vector&lt;std::string> vecline,veccli;     struct timeval timeout; }; <\/code><\/pre>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0442\u0440\u0438 \u0441\u043e\u043a\u0435\u0442\u0430: sockfd \u0441\u043b\u0443\u0448\u0430\u0435\u0442 tcp \u043f\u043e\u0440\u0442, newsockfd \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 tcp \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0438 udpsocket  &#8212; \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 udp.<\/p>\n<p>\u0423 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 sockfd &#8212; \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 tcp \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0438 udpsocket &#8212; \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 udp \u043f\u0430\u043a\u0435\u0442\u043e\u0432.<\/p>\n<p>\u0421\u0430\u043c \u043a\u043b\u0430\u0441\u0441 Connection.cpp<\/p>\n<pre><code class=\"cpp\">#include \"Connection.h\" void Connection::bzero(char* buf, int l) {     memset(buf, 0, l); } void Connection::error(const char* msg) {     int err = WSAGetLastError();     perror(msg);     std::cout&lt;&lt;err&lt;&lt;std::endl;     WSACleanup();     std::cin.ignore();     exit(1); } Connection::Connection(const char*timeout_) {     buflen = 256;     buffer = new char[buflen];     strFile = \"\";     strCli = \"\";     timeout.tv_sec = 0;     if(timeout_!=\"\")         timeout.tv_usec = atoi(timeout_);     else         timeout.tv_usec = 500; } int Connection::InitServer(const char* address,int port_) {     WSADATA ws = { 0 };     if (WSAStartup(MAKEWORD(2, 2), &amp;ws) == 0)     {         sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);         if (sockfd &lt; 0)             error(\"ERROR opening socket\");         bzero((char*)&amp;cli_addr, sizeof(cli_addr));         memset(serv_addr.sin_zero, 0, sizeof(serv_addr.sin_zero));         serv_addr.sin_family = AF_INET;         serv_addr.sin_port = htons(port_);         std::string str = \"\";         int i = 0;         while (address[i] != '.')             str += address[i++];         i++;         \/\/std::cout &lt;&lt; str&lt;&lt;std::endl;         serv_addr.sin_addr.S_un.S_un_b.s_b1 = atoi(str.c_str());         str = \"\";         while (address[i] != '.')             str += address[i++];         i++;         serv_addr.sin_addr.S_un.S_un_b.s_b2 = atoi(str.c_str());         \/\/std::cout &lt;&lt; str &lt;&lt; std::endl;         str = \"\";         while (address[i] != '.')             str += address[i++];         i++;         serv_addr.sin_addr.S_un.S_un_b.s_b3 = atoi(str.c_str());         \/\/std::cout &lt;&lt; str &lt;&lt; std::endl;         str = \"\";         while (i!=strlen(address))             str += address[i++];        \/\/ std::cout &lt;&lt; str &lt;&lt; std::endl;         serv_addr.sin_addr.S_un.S_un_b.s_b4 = atoi(str.c_str());          if (bind(sockfd, (struct sockaddr*)&amp;serv_addr, sizeof(serv_addr)) &lt; 0)             error(\"ERROR on binding\");         if (listen(sockfd, SOMAXCONN) &lt; 0)             error(\"ERROR on listen\");         std::cout &lt;&lt; \"Waiting client\" &lt;&lt; std::endl;         clilen = sizeof(cli_addr);               newsockfd = accept(sockfd, (struct sockaddr*)&amp;cli_addr, &amp;clilen);         std::cout &lt;&lt; \"Client connected\" &lt;&lt; std::endl;         if (newsockfd &lt; 0)             error(\"ERROR on accept\");         \/\/if (setsockopt(newsockfd, SOL_SOCKET, SO_RCVTIMEO, (char*)&amp;timeout, sizeof timeout) &lt; 0)           \/\/  error(\"setsockopt failed\\n\");          if (setsockopt(newsockfd, SOL_SOCKET, SO_SNDTIMEO, (char*)&amp;timeout, sizeof timeout) &lt; 0)             error(\"setsockopt failed\\n\");     }     else         WSAGetLastError();     return 0; }  int Connection::InitServerUDP(const char* address,int port) {     udpsocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);     if (udpsocket &lt; 0)         error(\"ERROR opening socket\");     serv_addr_udp.sin_family = AF_INET;     serv_addr_udp.sin_port = htons(port);     std::string str = \"\";     int i = 0;     while (address[i] != '.')         str += address[i++];     i++;     serv_addr_udp.sin_addr.S_un.S_un_b.s_b1 = atoi(str.c_str());\/\/\u0437\u0430\u0434\u0430\u0435\u043c \u043e\u043a\u0442\u0435\u0442\u044b \u0430\u0434\u0440\u0435\u0441\u0430     str = \"\";     while (address[i] != '.')         str += address[i++];     i++;     serv_addr_udp.sin_addr.S_un.S_un_b.s_b2 = atoi(str.c_str());\/\/\u0437\u0430\u0434\u0430\u0435\u043c \u043e\u043a\u0442\u0435\u0442\u044b \u0430\u0434\u0440\u0435\u0441\u0430     str = \"\";     while (address[i] != '.')         str += address[i++];     i++;     serv_addr_udp.sin_addr.S_un.S_un_b.s_b3 = atoi(str.c_str());\/\/\u0437\u0430\u0434\u0430\u0435\u043c \u043e\u043a\u0442\u0435\u0442\u044b \u0430\u0434\u0440\u0435\u0441\u0430     str = \"\";     while (i != strlen(address))         str += address[i++];     serv_addr_udp.sin_addr.S_un.S_un_b.s_b4 = atoi(str.c_str());\/\/\u0437\u0430\u0434\u0430\u0435\u043c \u043e\u043a\u0442\u0435\u0442\u044b \u0430\u0434\u0440\u0435\u0441\u0430     if (bind(udpsocket, (struct sockaddr*)&amp;serv_addr_udp, sizeof(serv_addr_udp)) &lt; 0)         error(\"ERROR on binding\");     std::cout &lt;&lt; \"Udp Ready\" &lt;&lt; std::endl;     return 0; } char* Connection::GetBuffer() {     return buffer; } std::vector&lt;std::string> Connection::GetVec() {     return vecline; } int Connection::ServerClose() {     shutdown(newsockfd, 0);     shutdown(sockfd, 0);     shutdown(udpsocket, 0);     closesocket(newsockfd);     closesocket(sockfd);     closesocket(udpsocket);     WSACleanup();     return 0; } int Connection::SendServer(std::string line) {     memset(buffer, 0, buflen);     n = send(newsockfd, line.c_str(), buflen, 0);     \/\/std::cout &lt;&lt; line &lt;&lt; std::endl;     if (n &lt; 0)         error(\"ERROR on send\");     return n; } int Connection::Send(std::string line) {     n = send(sockfd, line.c_str(), buflen, 0);     if (n &lt; 0)         error(\"ERROR on send\");     return n; } int Connection::SendUDP(std::string line) {     n = sendto(udpsocket, line.c_str(), buflen, 0, (struct sockaddr*)&amp;serv_addr_udp, sizeof serv_addr_udp);     if (n &lt; 0)         error(\"ERROR on send udp\");     \/\/std::cout &lt;&lt; \"send\" &lt;&lt; std::endl;     return n; } int Connection::ReceiveServer() {     memset(buffer, 0, buflen);     n = recv(newsockfd, buffer, buflen, 0);     if (n &lt; 0)         error(\"ERROR on read\");     return n; } int Connection::ReceiveServerUDP() {     memset(buffer, 0, buflen);     int slen = sizeof(sockaddr_in);     n = recvfrom(udpsocket, buffer, buflen, 0, (struct sockaddr*)&amp;cli_addr_udp, &amp;slen);     \/\/std::cout &lt;&lt; \"n=\" &lt;&lt; n &lt;&lt; std::endl;     if (n &lt; 0)         error(\"ERROR on read udp\");     for (int i = 0; i &lt; strlen(buffer); i++)         strFile += buffer[i];     if (vecline.size()!=0 &amp;&amp; strFile == vecline[vecline.size() - 1])         return n;\/\/\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043b\u0430\u0441\u044c \u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 udp \u043f\u0430\u043a\u0435\u0442\u0430     vecline.push_back(strFile);     \/\/std::cout &lt;&lt; strFile &lt;&lt;\" buf len\"&lt;&lt; strlen(buffer)&lt;&lt; std::endl;     strFile = \"\";     return n; } int Connection::Receive() {     memset(buffer, 0, buflen);     n = recv(sockfd, buffer, buflen, 0);     \/\/std::cout &lt;&lt; buffer &lt;&lt; std::endl;     if (n &lt; 0)         error(\"ERROR on read\");     for (int i = 0; i &lt; strlen(buffer); i++)         strCli += buffer[i];     if (veccli.size() !=0 &amp;&amp; strCli == veccli[veccli.size() - 1])         return n;\/\/\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043b\u0430\u0441\u044c \u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 tcp \u043f\u0430\u043a\u0435\u0442\u0430     veccli.push_back(strCli);     strCli = \"\";     return n; } int Connection::Block(bool block) {     u_long argp = block ? 1 : 0;     ioctlsocket(sockfd, FIONBIO, &amp;argp);     return n; } int Connection::BlockServer(bool block) {     u_long argp = block ? 1 : 0;     ioctlsocket(newsockfd, FIONBIO, &amp;argp);     return n; } Connection::~Connection() {     delete[] buffer; } int Connection::InitClient(const char* address_, int port_,int udpport) {     WSADATA ws = { 0 };     if (WSAStartup(MAKEWORD(2, 2), &amp;ws) == 0)     {         sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);         if (sockfd &lt; 0)             error(\"ERROR opening socket\");         bzero((char*)&amp;serv_addr, sizeof(serv_addr));         bzero((char*)&amp;cli_addr, sizeof(cli_addr));         serv_addr.sin_family = AF_INET;         serv_addr.sin_addr.s_addr = inet_addr(address_);         serv_addr.sin_port = htons(port_);         servlen = sizeof(serv_addr);         n = connect(sockfd, (struct sockaddr*)&amp;serv_addr, servlen);         if (n &lt; 0)             error(\"ERROR on connect\");         if (setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (char*)&amp;timeout, sizeof timeout) &lt; 0)             error(\"setsockopt failed\");         udpsocket = socket(AF_INET, SOCK_DGRAM, 0);         if (udpsocket &lt; 0)             error(\"ERROR opening udp socket\");         memset((char*)&amp;serv_addr_udp, 0, sizeof(serv_addr_udp));         serv_addr_udp.sin_family = AF_INET;         serv_addr_udp.sin_port = htons(udpport);         serv_addr_udp.sin_addr.S_un.S_addr = inet_addr(address_);         \/\/if (setsockopt(sockfd, SOL_SOCKET, SO_SNDTIMEO, (char*)&amp;timeout, sizeof timeout) &lt; 0)           \/\/  error(\"setsockopt failed\");     }     else         WSAGetLastError();     return 0; } int Connection::ClientClose() {     shutdown(udpsocket, 0);     shutdown(sockfd, 0);     closesocket(udpsocket);     closesocket(sockfd);     WSACleanup();     return 0; }   <\/code><\/pre>\n<p><em>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u0432\u043e\u0434\u044b<\/em><\/p>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u2013 \u043c\u043e\u0433\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0442\u0430\u043a\u043e\u0439 \u0432\u043e\u0442 \u0441\u0432\u044f\u0437\u043a\u0435 \u0438 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430\u043c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0438\u043d\u0443\u0441 \u2013 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0445 \u0431\u0443\u043a\u0432 \u0432 \u0444\u0430\u0439\u043b\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u0435\u043c\u0430 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u0447\u0438\u0442\u0430\u0435\u043c\u0430\u044f.<\/p>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0437\u0434\u0435\u0441\u044c:<\/p>\n<p><a href=\"https:\/\/gitlab.com\/Gremlin_Rage\/cpp\/-\/tree\/master\/Client\" rel=\"noopener noreferrer nofollow\">https:\/\/gitlab.com\/Gremlin_Rage\/cpp\/-\/tree\/master\/Client<\/a><\/p>\n<p><a href=\"https:\/\/gitlab.com\/Gremlin_Rage\/cpp\/-\/tree\/master\/Server\" rel=\"noopener noreferrer nofollow\">https:\/\/gitlab.com\/Gremlin_Rage\/cpp\/-\/tree\/master\/Server<\/a><\/p>\n<p>\u041a\u043b\u0430\u0441\u0441 Connection \u043e\u0431\u0449\u0438\u0439 \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c.<\/p>\n<p>\u041f\u043e \u0437\u0430\u0434\u0430\u0447\u0435 \u0432 \u043d\u0435\u0439 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u043c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u2013 \u043f\u043e \u043c\u043d\u0435 \u0435\u0433\u043e \u0431\u044b \u0442\u043e\u0436\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u043d\u0435 \u043f\u043e\u043c\u0435\u0448\u0430\u043b\u043e.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/685870\/\"> https:\/\/habr.com\/ru\/post\/685870\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p><em>\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435<\/em><\/p>\n<p>\u041a\u0430\u043a-\u0442\u043e \u0440\u0430\u0437 \u043e\u0442\u043a\u043b\u0438\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u044e \u0421++ \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0441 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0432\u0438\u043b\u043a\u043e\u0439 \u043e\u0442 \u0441\u043e\u0440\u043e\u043a\u0430 \u0434\u043e \u0441\u0442\u043e \u0432\u043e\u0441\u044c\u043c\u0438\u0434\u0435\u0441\u044f\u0442\u0438 \u0442\u044b\u0441\u044f\u0447 \u0432 \u0441\u0432\u043e\u0435\u043c \u0440\u0435\u0433\u0438\u043e\u043d\u0435. \u0414\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0438\u043c\u0435\u043b \u043e\u043f\u044b\u0442\u0430 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043c\u043d\u0435 \u0432 \u043e\u0442\u0432\u0435\u0442 \u043f\u0440\u0438\u0441\u043b\u0430\u043b\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435. \u0422\u0430\u043c \u0431\u044b\u043b\u043e \u0442\u0440\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0434\u0432\u0435. \u041a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u044f \u043b\u044e\u0431\u0438\u043c\u0430\u044f \u0440\u0443\u0431\u0440\u0438\u043a\u0430 \u2013 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043e\u0434\u043d\u0443 \u0438\u0437 \u043d\u0438\u0445.<\/p>\n<p><em>1.\u00a0\u00a0\u00a0\u00a0\u00a0 \u0417\u0430\u0434\u0430\u0447\u0430<\/em><\/p>\n<p>\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c. <\/p>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 Github \u0438 \u043f\u0440\u0438\u0441\u043b\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0438. \u041d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u043b\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b.<\/p>\n<p>\u0422\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 1. \u042f\u0437\u044b\u043a \u0421++. \u0421\u0440\u0435\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 Visual Studio 2019.<\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430. \u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c 2 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Client.exe \u0438 Server.exe \u043f\u043e\u0434 Windows, \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 UPD \u0441\u043e\u043a\u0435\u0442 \u0441 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u043f\u043e TCP.<\/p>\n<p>1.\u0421\u0435\u0440\u0432\u0435\u0440. Server.exe<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u2013 IP, \u0432\u0442\u043e\u0440\u043e\u0439 \u043d\u043e\u043c\u0435\u0440 \u043f\u043e\u0440\u0442\u0430, \u0442\u0440\u0435\u0442\u0438\u0439 \u2013 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<p>\u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u0442\u044c \u043f\u043e IP \u0430\u0434\u0440\u0435\u0441\u0443 \u043f\u043e\u0440\u0442 \u0438 \u0436\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043f\u043e TCP.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<p>Server.exe 127.0.0.1 5555 temp<\/p>\n<p>1.\u00a0\u00a0\u00a0\u00a0\u00a0 \u041a\u043b\u0438\u0435\u043d\u0442. Client.exe<\/p>\n<p>\u0421\u0442\u0430\u0440\u0442 \u0441 5 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438.<\/p>\n<p>1 \u0438 2 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u2013 IP \u0430\u0434\u0440\u0435\u0441 \u0438 \u043f\u043e\u0440\u0442 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443. \u0422\u0440\u0435\u0442\u0438\u0439 \u2013 \u043f\u043e\u0440\u0442 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 UDP \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u0427\u0435\u0442\u0432\u0435\u0440\u0442\u044b\u0439 \u2013 \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443. \u041f\u044f\u0442\u044b\u0439 \u2013 \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u043d\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 UDP \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440<\/p>\n<p>Client.exe 127.0.0.1 5555 6000 test.txt 500<\/p>\n<p>3.\u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.<\/p>\n<p>\u041f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 TCP \u0441\u043e\u043a\u0435\u0442 \u0441 IP \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0438 \u043f\u043e\u0440\u0442\u043e\u043c \u0438\u0437 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432(1 \u0438 2 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b), \u0431\u0435\u0440\u0435\u0442 \u0435\u0433\u043e \u043d\u0430 \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.<\/p>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043f\u043e TCP \u043d\u0430 IP \u0430\u0434\u0440\u0435\u0441 \u0438 \u043f\u043e\u0440\u0442 \u0438\u0437 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 (1 \u0438 2 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b ) \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0444\u0430\u0439\u043b (3 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 10 \u041c\u0431.) \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e TCP \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044e \u0438\u043c\u044f \u0444\u0430\u0439\u043b \u0438 \u043f\u043e\u0440\u0442 UDP \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440. <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0444\u0430\u0439\u043b \u0431\u043b\u043e\u043a\u0430\u043c\u0438 (\u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 udp \u043f\u0430\u043a\u0435\u0442\u0430\u0445 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u0432\u043e\u0439 id)\u00a0 udp \u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043f\u043e TCP \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043e \u043f\u0440\u0438\u0435\u043c\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c. <\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 (5 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440) \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0430\u043a\u0435\u0442, \u0442\u043e \u043f\u0430\u043a\u0435\u0442 \u043f\u043e udp \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u044b \u043a\u043b\u0438\u0435\u043d\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 TCP \u043e\u0431 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0444\u0430\u0439\u043b\u0430,<\/p>\n<p>\u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 TCP \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443.<\/p>\n<p>\u0421\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043f\u043e \u0422\u0421P, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0438 \u043f\u043e\u0440\u0442\u0430 udp \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 udp \u0441\u043e\u043a\u0435\u0442 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c udp \u043f\u0430\u043a\u0435\u0442\u044b \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441 IP \u0430\u0434\u0440\u0435\u0441\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u043f\u043e\u0440\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c.<\/p>\n<p>\u041d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 udp \u043f\u0430\u043a\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 tcp \u0441\u043e\u043a\u0435\u0442 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 (\u0432\u0441\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u044b \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435) \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0444\u0430\u0439\u043b \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 (3 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440).<\/p>\n<p>\u0424\u043e\u0440\u043c\u0430\u0442 \u043f\u043e\u0441\u044b\u043b\u043e\u043a \u043f\u043e TCP (\u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430, \u043f\u043e\u0440\u0442 \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432) &#8212; \u043d\u0430 \u0432\u0430\u0448\u0435 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435<\/p>\n<p>\u0444\u043e\u0440\u043c\u0430\u0442 \u0438 \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044f \u0431\u043b\u043e\u043a\u043e\u0432 \u0434\u043b\u044f udp \u043f\u0430\u043a\u0435\u0442\u043e\u0432 &#8212; \u043d\u0430 \u0432\u0430\u0448\u0435 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435<\/p>\n<p><em>2.\u00a0\u00a0\u00a0\u00a0\u00a0 \u0420\u0435\u0448\u0435\u043d\u0438\u0435<\/em><\/p>\n<p>\u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u2013 \u0442\u043e \u043e\u043d\u0430 \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0430 \u2013 \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u0438\u0445 \u0442\u0430\u043c \u00ab\u0431\u0435\u043b\u044b\u0445 \u043f\u044f\u0442\u0435\u043d\u00bb. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043a\u043e\u0434\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u044f.<\/p>\n<p><em>\u041a\u043e\u0434 \u043a\u043b\u0438\u0435\u043d\u0442\u0430<\/em>   <\/p>\n<pre><code class=\"cpp\">#include &lt;iostream> #include \"Connection.h\"\/\/\u041a\u043b\u0430\u0441\u0441 \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044b \u0441\u043e\u043a\u0435\u0442\u044b #include &lt;fstream> #include &lt;vector> #include &lt;string> int main(int argc,char*argv[]) {     if (argc == 1)     {         std::cout &lt;&lt; \"no flags argc!\" &lt;&lt; std::endl;         std::cout &lt;&lt; \"Usage: Client.exe &lt;ip> &lt;portTCP> &lt;portUDP> &lt;Filename> &lt;Timeout>\" &lt;&lt; std::endl;         exit(1);     }     Connection* con = new Connection(argv[5]);\/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0432 \u043d\u0435\u0433\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442     con->InitClient(argv[1], atoi(argv[2]),atoi(argv[3]));\/\/\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443(\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c ip \u0430\u0434\u0440\u0435\u0441,tcp \u043f\u043e\u0440\u0442 \u0438 udp \u043f\u043e\u0440\u0442     std::vector&lt;std::string> vecline;     std::string line;     std::ifstream in(argv[4]); \/\/ \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f     if (in.is_open())     {         int ch=0;         while((ch=in.get())!=EOF)         {             line += ch;             if (line.size() == 242)             {                 vecline.push_back(line);                 line = \"\";             }         }         if(line!=\"\")             vecline.push_back(line);     }     in.close();     \/\/ \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b     std::string path = argv[4];     std::string filename = path.substr(path.rfind('\\\\') + 1);\/\/\u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0438\u0437 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u043a \u0444\u0430\u0439\u043b\u0443     con->Send(argv[3]);\/\/\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 udp \u043f\u043e\u0440\u0442 \u0447\u0435\u0440\u0435\u0437 tcp     con->Send(filename);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430     con->Send(std::to_string(vecline.size()));\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043a\u043e\u043b-\u0432\u043e \u0441\u0442\u0440\u043e\u043a     std::cout &lt;&lt; \"Starting transmission\" &lt;&lt; std::endl;\/\/\u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443     std::string id = \"\";     for (int i = 0; i &lt; vecline.size(); i++)     {         id = \"Begin\";         if (i \/ 10.0 &lt; 1)             id += \"00000\";         else if((i\/100.0&lt;1) &amp;&amp; (i\/10.0>=1))             id += \"0000\";         else if ((i\/1000.0&lt;1) &amp;&amp; (i \/ 100.0 >= 1))             id += \"000\";         else if ((i \/ 10000.0 &lt; 1) &amp;&amp; (i \/ 1000.0 >= 1))             id += \"00\";         else if ((i \/ 100000.0 &lt; 1) &amp;&amp; (i \/ 10000.0 >= 1))             id += \"00\";         else if ((i \/ 1000000.0 &lt; 1) &amp;&amp; (i \/ 100000.0 >= 1))             id += \"00\";         else             id += \"0\";         id += std::to_string(i) + \"End\";         id += vecline[i]; \/\/\u043e\u0431\u0435\u0440\u0442\u044b\u0432\u0430\u0435\u043c udp \u043f\u0430\u043a\u0435\u0442 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 id \u0444\u043e\u0440\u043c\u0430\u0442\u0430 Begin000001EndData         con->SendUDP(id);\/\/\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c udp \u043f\u0430\u043a\u0435\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440         \/\/Sleep(1000);         con->Receive();\/\/\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 tcp         std::cout &lt;&lt; \"i\" &lt;&lt; i &lt;&lt; std::endl;         if ((i!=0) &amp;&amp; (i != atoi(con->GetBuffer())))\/\/\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u043f\u0430\u043a\u0435\u0442\u044b             i--;\/\/\u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0438\u0441\u044c \u043f\u043e \u0434\u043e\u0440\u043e\u0433\u0435 \u0442\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c i \u0438 \u043f\u043e \u0446\u0438\u043a\u043b\u0443 \u0441\u043e\u0441\u0442\u043e\u0438\u0442\u0441\u044f         id = \"\";\/\/\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430     }     con->ClientClose();     con->~Connection();     std::cout &lt;&lt; \"Done!\\n\"; }<\/code><\/pre>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0444\u0430\u0439\u043b(\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430) \u043f\u043e\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e &#8212; \u043f\u043e\u043a\u0430 \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0435\u0442 \u0434\u043b\u0438\u043d\u044b 242 \u0441\u0438\u043c\u0432\u043e\u043b\u0430. 14 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0434\u043b\u044f udp \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 . \u0412 \u0441\u0443\u043c\u043c\u0435 \u0431\u0443\u0434\u0435\u0442 256=buflen.<\/p>\n<p><em>\u041a\u043e\u0434 \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/em><\/p>\n<pre><code class=\"cpp\">#include &lt;iostream> #include \"Connection.h\" #include &lt;fstream> #include &lt;string> int main(int argc, char* argv[]) {     system(\"Del \\\"C:\\\\temp\\\\test.txt\\\"\");\/\/\u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043d\u0430\u0448 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u0435\u0441\u043b\u0438 \u043e\u043d \u0435\u0441\u0442\u044c     if (argc == 1)     {         std::cout &lt;&lt; \"no flags argc!\" &lt;&lt; std::endl;         std::cout &lt;&lt; \"Usage: Server.exe &lt;ip> &lt;port> &lt;Folder>\" &lt;&lt; std::endl;         exit(1);     }     std::string timeout_ = \"500\";\/\/\u0437\u0430\u0434\u0430\u0435\u043c \u0442\u0430\u0439\u043c\u0430\u0443\u0442     Connection* con = new Connection(timeout_.c_str());     con->InitServer(argv[1], atoi(argv[2]));\/\/\u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 TCP \u0441\u043e\u043a\u0435\u0442\u043e\u043c     con->ReceiveServer();\/\/\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043f\u043e\u0440\u0442\u043e\u043c udp \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430     int portudp = atoi(con->GetBuffer());     con->InitServerUDP(argv[1], portudp); \/\/\u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 UDP \u0441\u043e\u043a\u0435\u0442\u043e\u043c     con->ReceiveServer();\/\/\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430     std::string FileName = con->GetBuffer();     if (FileName.size() > FILENAME_MAX)         std::cout &lt;&lt; \"File name is so long\" &lt;&lt; std::endl;     con->ReceiveServer();\/\/\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u043b-\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u0432 \u0444\u0430\u0439\u043b\u0435     int j = atoi(con->GetBuffer());     int i = 0,jj;     std::string id = \"\";     std::cout &lt;&lt; \"Starting transmission\" &lt;&lt; std::endl;\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430     while (i &lt; j)     {         jj = 0;         con->ReceiveServerUDP();         while (con->GetVec()[i][jj++] != 'n')             ;         while (con->GetVec()[i][jj] != 'E')             id += con->GetVec()[i][jj++];\/\/\u043f\u0430\u0440\u0441\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0443         con->SendServer(id);\/\/\u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c id \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0443         std::cout &lt;&lt; \"i=\"&lt;&lt;i &lt;&lt; std::endl;         if (atoi(id.c_str()) == i) );\/\/\u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c id \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438         {             i++;               }         id = \"\";     }     std::cout &lt;&lt; \"Transmission is end\" &lt;&lt; std::endl;     std::ofstream out;          \/\/ \u043f\u043e\u0442\u043e\u043a \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438     std::string path = argv[3];     system(\"mkdir \\\"C:\\\\temp\\\\\\\"\");\/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e     path += '\\\\' + FileName;     if (path.size() > FILENAME_MAX)         std::cout &lt;&lt; \"File name is so long\" &lt;&lt; std::endl;     std::cout &lt;&lt; \"Creating file\" &lt;&lt; std::endl;     out.open(path); \/\/ \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438     if (out.is_open())     {         std::string strfile = \"\";         int jj;         for (int i = 0; i &lt; con->GetVec().size(); i++)         {             strfile = \"\";             jj = 0;             while (con->GetVec()[i][jj++] != 'd')                 ;             for (jj; jj &lt; con->GetVec()[i].size(); jj++)                 strfile += con->GetVec()[i][jj];\/\/\u0412\u044b\u0440\u0435\u0437\u0430\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 udp             out &lt;&lt;strfile;\/\/ \u0438 \u043f\u0438\u0448\u0435\u043c \u0432 \u0444\u0430\u0439\u043b         }         out.close();     }     con->ServerClose();     con->~Connection();     std::cout &lt;&lt; \"Done!\\n\"; }<\/code><\/pre>\n<p>\u0421\u0445\u0435\u043c\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c \u0436\u0435 \u043a\u043b\u0430\u0441\u0441\u0435 Connection \u00a0\u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u043e\u043a\u0435\u0442\u044b, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0447\u0442\u043e \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c \u2013 \u044d\u0442\u043e \u0432\u043e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b:<\/p>\n<p><em>\u0422\u0430\u0439\u043c\u0430\u0443\u0442\u044b:<\/em><\/p>\n<pre><code class=\"cpp\">struct timeval timeout;  timeout.tv_sec = 0; if(timeout_!=\"\")     timeout.tv_usec = atoi(timeout_); else     timeout.tv_usec = 500;<\/code><\/pre>\n<p>\u0418 \u0447\u0430\u0441\u0442\u0438 \u043a\u043e\u0434\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439(\u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u0438\u0435\u043c\u043e\u043c \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u2013 \u043e\u0434\u0438\u043d \u0440\u0430\u0437):<\/p>\n<pre><code class=\"cpp\">if (setsockopt(newsockfd, SOL_SOCKET, SO_SNDTIMEO, (char*)&amp;timeout, sizeof timeout) &lt; 0)             error(\"setsockopt failed\\n\");<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e tcp \u0441\u043e\u043a\u0435\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438<\/p>\n<pre><code class=\"cpp\">if (setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (char*)&amp;timeout, sizeof timeout) &lt; 0)             error(\"setsockopt failed\");<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e tcp \u0441\u043e\u043a\u0435\u0442\u0430 \u043f\u0440\u0438\u0435\u043c\u0430<\/p>\n<p>P.S. \u0421\u0447\u0438\u0442\u0430\u044e \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u043f\u043e\u043b\u043d\u044b\u043c, \u0435\u0441\u043b\u0438 \u044f \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044e \u043a\u043b\u0430\u0441\u0441 Connection \u0441 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u0433\u043b\u0430\u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c\u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b Connection.h<\/p>\n<pre><code class=\"cpp\">#pragma once #include &lt;iostream> #include &lt;stdlib.h> #include &lt;string.h> #include &lt;sys\/types.h> #include &lt;WinSock.h> #include &lt;fcntl.h> #pragma comment (lib,\"WS2_32.lib\") #pragma warning(disable : 4996) #include &lt;vector> class Connection { public:     Connection(const char* timeout);     int InitServer(const char* address, int port);     int ServerClose();     int Send(std::string line);     int Receive();     int SendUDP(std::string line);     int ReceiveUDP();     int InitClient(const char* address, int port,int udpport);     int ClientClose();     void bzero(char* buf, int l);     void error(const char* msg);     int SendServer(std::string line);     int ReceiveServer();     int ReceiveServerUDP();     int SendServerUDP();     char* GetBuffer();     std::vector&lt;st<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-337791","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/337791","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=337791"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/337791\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=337791"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=337791"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=337791"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}