zoukankan      html  css  js  c++  java
  • win32 socket编程(五)——客户端实例(TCP)

    一、客户端操作流程

      1.1 加载套接字库(WSAStartup())

      1.2创建套接字(socket())。

      1.3向服务器发出连接请求(connect())。

      对于客户端来说,它不需要绑定,可以直接连接服务器。这可以通过调用connect函数与服务器建立一个连接。其函数原型如下:

    int connect(SOCKET s, const struct Sockaddr FAR* name , int namelen);

    参数:

    a) s:客户端用于首发数据的套接字。

    b) name:指定网路主机的IP地址和端口信息。

    c) namelen:第二个参数的长度。

    想要与服务器建立连接,首先需要定义一个地址结构体(SOCKADDR_IN)变量,并对其成员进行赋值,设定服务端的IP地址和端口号,这里的端口需要与服务器使用的端口保存一致,而且使用网路字节顺序。

    1.4 和服务器端进行通信(接受和发送信息(send()/recv()))

    1.5 关闭套接字 (closesocket()/WSACleanup())

    二、客户端实例

     1 #include<winsock2.h>
     2 #include<iostream>
     3 using namespace std;
     4 int main()
     5 {
     6     WORD wVersion;
     7     WSADATA wsaData;
     8     int er;
     9     //1.初始化版本
    10     wVersion = MAKEWORD(1,1);
    11     //加载套接字库
    12     er = WSAStartup(wVersion,&wsaData);
    13     if (er!=0)
    14     {
    15         return -1;
    16     }
    17     //检测套接字
    18     if (LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
    19     {
    20         return -2;
    21     }
    22 
    23     //2.创建套接字
    24     SOCKET sock = socket(AF_INET,SOCK_STREAM,0);
    25     //3.连接服务器
    26     SOCKADDR_IN addr_in;
    27     addr_in.sin_family = AF_INET;
    28     addr_in.sin_port = htons(7000);
    29     addr_in.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    30     connect(sock,(sockaddr*)&addr_in,sizeof(addr_in));
    31     //4.发送或者接受数据
    32     char recvBuf[1024];
    33     recv(sock,recvBuf,strlen(recvBuf)+1,0);
    34     cout << "接受到服务器数据:" << endl;
    35     char sendBuf[]="window socket 程序测试";
    36     send(sock,sendBuf,sizeof(sendBuf),0);
    37     //5.关闭套接字
    38     closesocket(sock);
    39     WSACleanup();
    40     system("pause");
    41     return 0;
    42 }

    三、TCP/IP工作原理图

  • 相关阅读:
    一个基于C++11的定时器队列(timerfd,poll实现)
    Mysql学习(一)添加一个新的用户并用golang操作Mysql
    epoll使用详解
    基于C++11实现线程池的工作原理
    ubuntu18.04初始化配置
    muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor
    muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制
    muduo网络库学习笔记(三)TimerQueue定时器队列
    关于 JavaScript 的 null 和 undefined,判断 null 的真实类型
    vue 双向数据绑定原理
  • 原文地址:https://www.cnblogs.com/506941763lcj/p/11032808.html
Copyright © 2011-2022 走看看