• 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工作原理图

  • 相关阅读:
    Windows核心编程 第八章 用户方式中线程的同步(下)
    Windows核心编程 第八章 用户方式中线程的同步(下)
    Windows核心编程 第八章 用户方式中线程的同步(上)
    Windows核心编程 第八章 用户方式中线程的同步(上)
    Windows PE 第四章 导入表
    Windows PE 第四章 导入表
    PAT 1005 继续(3n+1)猜想
    PAT 甲级 1002 A+B for Polynomials
    HDU 1798 Tell me the area
    HDU 1159 Common Subsequence
  • 原文地址:https://www.cnblogs.com/506941763lcj/p/11032808.html
Copyright © 2020-2023  润新知