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;
    }
  • 相关阅读:
    html5+css3中的background: -moz-linear-gradient 用法 (转载)
    CentOS 安装Apache服务
    Linux 笔记
    CURL 笔记
    Spring Application Context文件没有提示功能解决方法
    LeetCode 389. Find the Difference
    LeetCode 104. Maximum Depth of Binary Tree
    LeetCode 520. Detect Capital
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 136. Single Number
  • 原文地址:https://www.cnblogs.com/mengjuanjuan/p/10667688.html
Copyright © 2011-2022 走看看