zoukankan      html  css  js  c++  java
  • C/S模式

    1. 基于TCP协议的C/S模式

    Server

    #include <iostream>
    #include <WinSock2.h>      //网络头文件
    using namespace std;
    #pragma comment(lib, "WS2_32.lib")   //网络库
    int main()
    {
     WSADATA wsaData;
     //打开网络库
     if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)      
     {
      cout << "WSAStartup 无法初始化" << endl;
      return 0;
     }
     //校验版本
     if (2 != HIBYTE(wsaData.wVersion) || 2 != LOBYTE(wsaData.wVersion))
     {
      //说明版本不对,清理网络库
      WSACleanup();
      return 0;
     }
     //创建Socket
     SOCKET socket_server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
     if (socket_server == INVALID_SOCKET)
     {
      cout << "创建Socket无效" << endl;
      WSACleanup();
      return 0;
     }
     //绑定地址与端口
     SOCKADDR_IN addr;
     int addr_len = sizeof(SOCKADDR_IN);
     int port = 9901;
     addr.sin_family = AF_INET;
     addr.sin_port = htons(port);
     addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
     if (bind(socket_server, (const SOCKADDR*)&addr, addr_len) == SOCKET_ERROR)
     {
      cout << "绑定失败" << endl;
      closesocket(socket_server);
      WSACleanup();
      return 0;
     }
     //开始监听
     if (listen(socket_server, SOMAXCONN) == SOCKET_ERROR)
     {
      cout << "监听失败" << endl;
      closesocket(socket_server);
      WSACleanup();
      return 0;
     }
     //创建客户端socket
     SOCKET socket_client;
     SOCKADDR_IN from;
     int len = sizeof(from);
     socket_client = accept(socket_server, (SOCKADDR*)&from, &len);
     if (socket_client == INVALID_SOCKET)
     {
      cout << "创建客户端socket失败" << endl;
      closesocket(socket_server);
      WSACleanup();
      return 0;
     }
     //与客户端收发消息
     char buf[1500];
     int buf_len = 1024;
     while (1)
     {
      ZeroMemory(buf, sizeof(buf));
      if (0 == recv(socket_client, buf, buf_len, 0))
      {
       cout << "连接已关闭" << endl;
       closesocket(socket_server);
       WSACleanup();
       return 0;
      }
      cout << buf << endl;
      if (strcmp(buf, "quit") == 0)
      {
       break;
      }
     }
     closesocket(socket_server);
     closesocket(socket_client);
     WSACleanup();
     system("pause");
     return 0;
    }

    Client

    #include <iostream>
    #include <WinSock2.h>
    using namespace std;
    #pragma comment(lib, "WS2_32.lib")
    int main()
    {
     //打开网络库
     WSADATA WsaData;
     if( WSAStartup(MAKEWORD(2,2), &WsaData) != 0 )
     {
      cout << "WsaData无法初始化" << endl;
     }
     //校验版本
     if ( 2 != HIBYTE(WsaData.wVersion) || 2 != LOBYTE(WsaData.wVersion) )
     {
      //说明版本不对,清理网络库
      WSACleanup();
      return 0;
     }
     //创建套接字
     SOCKET socket_server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
     if (socket_server == INVALID_SOCKET)
     {
      cout << "创建Socket无效" << endl;
      WSACleanup();
      return 0;
     }
     //连接到服务器
     //需要服务器的ip地址和端口号
     SOCKADDR_IN addr;
     addr.sin_family = AF_INET;
     addr.sin_port = htons(9901);
     addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
     if ( connect(socket_server, (SOCKADDR*)&addr, sizeof(addr)) == SOCKET_ERROR )
     {
      cout << "连接服务器失败" << endl;
      WSACleanup();
      return 0;
     }
     while (1)
     {
      char buf[1400];
      cin >> buf;
      if (strcmp(buf, "quit") == 0)
      {
       send(socket_server, buf, strlen(buf), 0);
       break;
      }
      send(socket_server, buf, strlen(buf), 0);
     } 
     closesocket(socket_server);
     WSACleanup();
     system("pause");
     return 0;
    }

    2.基于UDP协议的C/S模式

    Server

    #include <iostream>
    #include <WinSock2.h>
    using namespace std;
    #pragma comment(lib, "WS2_32.lib")

    int main()
    {
     //打开网络库
     WSADATA wsaData;
     if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
     {
      cout << "打开网络库失败" << endl;
      return 0;
     }
     //创建套接字
     SOCKET server_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
     //绑定套接字
     SOCKADDR_IN addr;
     addr.sin_family = AF_INET;
     addr.sin_port = htons(9901);
     addr.sin_addr.S_un.S_addr = inet_addr("192.168.100.140");
     if(bind(server_socket, (SOCKADDR*)&addr, sizeof(addr)) == SOCKET_ERROR)
     {
      cout << "绑定套接字失败!!!" <<endl;
      closesocket(server_socket);
      WSACleanup();
      return 0;
     }
     while (true)
     {
      char buf[1500];
      ZeroMemory(buf, sizeof(buf));
      //发送数据的主机地址
      SOCKADDR_IN client_addr;
      int len = sizeof(client_addr);
      recvfrom(server_socket, buf, sizeof(buf), 0, (SOCKADDR*)&client_addr, &len);
      cout << buf << endl;
      if (strcmp(buf, "quit") == 0)
      {
       break;
      }
     }
     
     closesocket(server_socket);
     WSACleanup();
     system("pause");
     return 0;
    }
     
    Client
    #include <iostream>
    #include <WinSock2.h>
    using namespace std;
    #pragma comment(lib, "WS2_32.lib")
    int main()
    {
     //打开网络库
     WSADATA WsaData;
     if (WSAStartup(MAKEWORD(2,2), &WsaData) != 0)
     {
      cout << "打开网络库失败" << endl;
      return 0;
     }
     //创建套接字
     SOCKET server_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
     if (server_socket == INVALID_SOCKET)
     {
      cout << "创建socket失败" << endl;
      WSACleanup();
      return 0;
     }
     //发送数据
     SOCKADDR_IN addr;
     addr.sin_family = AF_INET;
     addr.sin_port = htons(9901);
     addr.sin_addr.S_un.S_addr = inet_addr("192.168.100.140");
     while (true)
     {
      char buf[1400];
      cin >> buf;
      sendto(server_socket, buf, strlen(buf), 0, (SOCKADDR*)&addr, sizeof(addr));
      if (strcmp(buf, "quit") == 0)
      {
       break;
      }
     }
     
     closesocket(server_socket);
     WSACleanup();
     system("pause");
     return 0;
    }
  • 相关阅读:
    领域模型(domain model)&贫血模型(anaemic domain model)&充血模型(rich domain model)
    XSS攻击&SQL注入攻击&CSRF攻击?
    算法笔记_054:Prim算法(Java)
    算法笔记_053:最优二叉查找树(Java)
    算法笔记_052:蓝桥杯练习Multithreading(Java)
    算法笔记_051:荷兰国旗问题(Java)
    算法笔记_050:硬币收集问题(Java)
    算法笔记_049:奇偶数排序(Java)
    算法笔记_048:找零问题(Java)
    算法笔记_047:复数运算(Java)
  • 原文地址:https://www.cnblogs.com/mengjuanjuan/p/10667688.html
Copyright © 2011-2022 走看看