На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: Oleg2004
  
    > Уроки по WinSock2 C++. Сетевое программирование., Уроки по сокетам в C++.
      Всем привет, решил записать небольшую серию уроков по WinSock в С++.

      Урок #1. Написание простейшего клиент-серверного приложения (видео)

      Исходный код:
      Скрытый текст

      ExpandedWrap disabled
        //
        // ClientC.cpp - код клиентской части
        //
        #include "stdafx.h"
        #pragma comment(lib, "ws2_32.lib")
        #include <winsock2.h>
        #include <iostream>
         
        #pragma warning(disable: 4996)
         
        int main(int argc, char* argv[]) {
            //WSAStartup
            WSAData wsaData;
            WORD DLLVersion = MAKEWORD(2, 1);
            if(WSAStartup(DLLVersion, &wsaData) != 0) {
                std::cout << "Error" << std::endl;
                exit(1);
            }
         
            SOCKADDR_IN addr;
            int sizeofaddr = sizeof(addr);
            addr.sin_addr.s_addr = inet_addr("127.0.0.1");
            addr.sin_port = htons(1111);
            addr.sin_family = AF_INET;
         
            SOCKET Connection = socket(AF_INET, SOCK_STREAM, NULL);
            if(connect(Connection, (SOCKADDR*)&addr, sizeof(addr)) != 0) {
                std::cout << "Error: failed connect to server.\n";
                return 1;
            }
            std::cout << "Connected!\n";
            char msg[256];
            recv(Connection, msg, sizeof(msg), NULL);
            std::cout << msg << std::endl;
         
            system("pause");
            return 0;
        }


      ExpandedWrap disabled
        //
        // ServerS.cpp - код серверной части
        //
        #include "stdafx.h"
        #pragma comment(lib, "ws2_32.lib")
        #include <winsock2.h>
        #include <iostream>
         
        #pragma warning(disable: 4996)
         
        int main(int argc, char* argv[]) {
            //WSAStartup
            WSAData wsaData;
            WORD DLLVersion = MAKEWORD(2, 1);
            if(WSAStartup(DLLVersion, &wsaData) != 0) {
                std::cout << "Error" << std::endl;
                exit(1);
            }
         
            SOCKADDR_IN addr;
            int sizeofaddr = sizeof(addr);
            addr.sin_addr.s_addr = inet_addr("127.0.0.1");
            addr.sin_port = htons(1111);
            addr.sin_family = AF_INET;
         
            SOCKET sListen = socket(AF_INET, SOCK_STREAM, NULL);
            bind(sListen, (SOCKADDR*)&addr, sizeof(addr));
            listen(sListen, SOMAXCONN);
         
            SOCKET newConnection;
            newConnection = accept(sListen, (SOCKADDR*)&addr, &sizeofaddr);
         
            if(newConnection == 0) {
                std::cout << "Error #2\n";
            } else {
                std::cout << "Client Connected!\n";
                char msg[256] = "Hello. It`s my first network program!";
                send(newConnection, msg, sizeof(msg), NULL);
            }
         
         
            system("pause");
            return 0;
        }
      Сообщение отредактировано: JoeUser -
        Вышел 2 урок: Видео

        Исходный код:
        ExpandedWrap disabled
          #include "stdafx.h"
          #pragma comment(lib, "ws2_32.lib")
          #include <winsock2.h>
          #include <iostream>
           
          #pragma warning(disable: 4996)
           
          SOCKET Connections[100];
          int Counter = 0;
           
          void ClientHandler(int index) {
              char msg[256];
              while(true) {
                  recv(Connections[index], msg, sizeof(msg), NULL);
                  for(int i = 0; i < Counter; i++) {
                      if(i == index) {
                          continue;
                      }
           
                      send(Connections[i], msg, sizeof(msg), NULL);
                  }
              }
          }
           
          int main(int argc, char* argv[]) {
              //WSAStartup
              WSAData wsaData;
              WORD DLLVersion = MAKEWORD(2, 1);
              if(WSAStartup(DLLVersion, &wsaData) != 0) {
                  std::cout << "Error" << std::endl;
                  exit(1);
              }
           
              SOCKADDR_IN addr;
              int sizeofaddr = sizeof(addr);
              addr.sin_addr.s_addr = inet_addr("127.0.0.1");
              addr.sin_port = htons(1111);
              addr.sin_family = AF_INET;
           
              SOCKET sListen = socket(AF_INET, SOCK_STREAM, NULL);
              bind(sListen, (SOCKADDR*)&addr, sizeof(addr));
              listen(sListen, SOMAXCONN);
           
              SOCKET newConnection;
              for(int i = 0; i < 100; i++) {
                  newConnection = accept(sListen, (SOCKADDR*)&addr, &sizeofaddr);
           
                  if(newConnection == 0) {
                      std::cout << "Error #2\n";
                  } else {
                      std::cout << "Client Connected!\n";
                      char msg[256] = "Hello. It`s my first network program!";
                      send(newConnection, msg, sizeof(msg), NULL);
           
                      Connections[i] = newConnection;
                      Counter++;
                      CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ClientHandler, (LPVOID)(i), NULL, NULL);
                  }
              }
           
           
              system("pause");
              return 0;
          }


        ExpandedWrap disabled
          #include "stdafx.h"
          #pragma comment(lib, "ws2_32.lib")
          #include <winsock2.h>
          #include <iostream>
           
          #pragma warning(disable: 4996)
           
          SOCKET Connection;
           
          void ClientHandler() {
              char msg[256];
              while(true) {
                  recv(Connection, msg, sizeof(msg), NULL);
                  std::cout << msg << std::endl;
              }
          }
           
          int main(int argc, char* argv[]) {
              //WSAStartup
              WSAData wsaData;
              WORD DLLVersion = MAKEWORD(2, 1);
              if(WSAStartup(DLLVersion, &wsaData) != 0) {
                  std::cout << "Error" << std::endl;
                  exit(1);
              }
           
              SOCKADDR_IN addr;
              int sizeofaddr = sizeof(addr);
              addr.sin_addr.s_addr = inet_addr("127.0.0.1");
              addr.sin_port = htons(1111);
              addr.sin_family = AF_INET;
           
              Connection = socket(AF_INET, SOCK_STREAM, NULL);
              if(connect(Connection, (SOCKADDR*)&addr, sizeof(addr)) != 0) {
                  std::cout << "Error: failed connect to server.\n";
                  return 1;
              }
              std::cout << "Connected!\n";
           
              CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ClientHandler, NULL, NULL, NULL);
           
              char msg1[256];
              while(true) {
                  std::cin.getline(msg1, sizeof(msg1));
                  send(Connection, msg1, sizeof(msg1), NULL);
                  Sleep(10);
              }
           
              system("pause");
              return 0;
          }
          Цитата assembly @
          Вышел 2 урок: Видео

          Судя по исходному коду (видео не смотрел), ты плохому учишь
            Цитата Олег М @
            ты плохому учишь

            Хорошо бы подробности с аргументами.
            Мои программные ништякиhttp://majestio.info
              Цитата JoeUser @
              Хорошо бы подробности с аргументами.

              Ну, видно, что в программировании сокетов и потоков чувак мало понимает, так что в видео у него скорее всего голые тёлки, не иначе.
                Вышел 3 урок: Видео

                Исходный код:
                ExpandedWrap disabled
                  #include "stdafx.h"
                  #pragma comment(lib, "ws2_32.lib")
                  #include <winsock2.h>
                  #include <iostream>
                  #include <string>
                  #pragma warning(disable: 4996)
                   
                  SOCKET Connection;
                   
                  void ClientHandler() {
                      int msg_size;
                      while(true) {
                          recv(Connection, (char*)&msg_size, sizeof(int), NULL);
                          char *msg = new char[msg_size + 1];
                          msg[msg_size] = '\0';
                          recv(Connection, msg, msg_size, NULL);
                          std::cout << msg << std::endl;
                          delete[] msg;
                      }
                  }
                   
                  int main(int argc, char* argv[]) {
                      //WSAStartup
                      WSAData wsaData;
                      WORD DLLVersion = MAKEWORD(2, 1);
                      if(WSAStartup(DLLVersion, &wsaData) != 0) {
                          std::cout << "Error" << std::endl;
                          exit(1);
                      }
                   
                      SOCKADDR_IN addr;
                      int sizeofaddr = sizeof(addr);
                      addr.sin_addr.s_addr = inet_addr("127.0.0.1");
                      addr.sin_port = htons(1111);
                      addr.sin_family = AF_INET;
                   
                      Connection = socket(AF_INET, SOCK_STREAM, NULL);
                      if(connect(Connection, (SOCKADDR*)&addr, sizeof(addr)) != 0) {
                          std::cout << "Error: failed connect to server.\n";
                          return 1;
                      }
                      std::cout << "Connected!\n";
                   
                      CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ClientHandler, NULL, NULL, NULL);
                   
                      std::string msg1;
                      while(true) {
                          std::getline(std::cin, msg1);
                          int msg_size = msg1.size();
                          send(Connection, (char*)&msg_size, sizeof(int), NULL);
                          send(Connection, msg1.c_str(), msg_size, NULL);
                          Sleep(10);
                      }
                   
                      system("pause");
                      return 0;
                  }



                ExpandedWrap disabled
                  #include "stdafx.h"
                  #pragma comment(lib, "ws2_32.lib")
                  #include <winsock2.h>
                  #include <iostream>
                   
                  #pragma warning(disable: 4996)
                   
                  SOCKET Connections[100];
                  int Counter = 0;
                   
                  void ClientHandler(int index) {
                      int msg_size;
                      while(true) {
                          recv(Connections[index], (char*)&msg_size, sizeof(int), NULL);
                          char *msg = new char[msg_size + 1];
                          msg[msg_size] = '\0';
                          recv(Connections[index], msg, msg_size, NULL);
                          for(int i = 0; i < Counter; i++) {
                              if(i == index) {
                                  continue;
                              }
                   
                              send(Connections[i], (char*)&msg_size, sizeof(int), NULL);
                              send(Connections[i], msg, msg_size, NULL);
                          }
                          delete[] msg;
                      }
                  }
                   
                  int main(int argc, char* argv[]) {
                      //WSAStartup
                      WSAData wsaData;
                      WORD DLLVersion = MAKEWORD(2, 1);
                      if(WSAStartup(DLLVersion, &wsaData) != 0) {
                          std::cout << "Error" << std::endl;
                          exit(1);
                      }
                   
                      SOCKADDR_IN addr;
                      int sizeofaddr = sizeof(addr);
                      addr.sin_addr.s_addr = inet_addr("127.0.0.1");
                      addr.sin_port = htons(1111);
                      addr.sin_family = AF_INET;
                   
                      SOCKET sListen = socket(AF_INET, SOCK_STREAM, NULL);
                      bind(sListen, (SOCKADDR*)&addr, sizeof(addr));
                      listen(sListen, SOMAXCONN);
                   
                      SOCKET newConnection;
                      for(int i = 0; i < 100; i++) {
                          newConnection = accept(sListen, (SOCKADDR*)&addr, &sizeofaddr);
                   
                          if(newConnection == 0) {
                              std::cout << "Error #2\n";
                          } else {
                              std::cout << "Client Connected!\n";
                              std::string msg = "Hello. It`s my first network program!";
                              int msg_size = msg.size();
                              send(newConnection, (char*)&msg_size, sizeof(int), NULL);
                              send(newConnection, msg.c_str(), msg_size, NULL);
                   
                              Connections[i] = newConnection;
                              Counter++;
                              CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ClientHandler, (LPVOID)(i), NULL, NULL);
                          }
                      }
                   
                   
                      system("pause");
                      return 0;
                  }
                  Ну ну...ждем следующих фрагментов...
                  Пока все тривиально однако... :)
                  GOD IS GOOD! IN ALL THE TIME!
                  1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script Execution time: 0,1040 ]   [ 15 queries used ]   [ Generated: 15.08.18, 03:43 GMT ]