前文链接:
(一)TCPSocket 服务端编写 —— 一个服务端对应多个客户端(超详细)


文章目录


客户端的一些API

在这里插入图片描述

  • socket:创建套接字
  • connect:与服务端建立连接
  • send/recv:发送数据 / 接收数据
  • close:关闭套按字

客户端编写顺序与上面函数顺序一样


客户端源码(超详细)

每行代码都加以详细的注释(看不懂你来砍我)~

#pragma comment(lib, "ws2_32.lib")	// 网络编程需要的链接库

#include <WinSock2.h>
#include <stdio.h>
#include <stdlib.h>

void main()
{
    WSADATA 		wsaData;	// 用于初始启动信息
    SOCKET		s;		// 客户端的套接字
    SOCKADDR_IN		ServerAddr;	// 服务端地址
    int			Port = 5150;	// 服务端端口号
    int 		Ret;		// 用于判断 
    char		buf[1024];	// 用来发送数据
    
    // 开始启动信息,2.2版本
    if((Ret = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)
    {
        printf("WSAStartup failed with error %d\n", Ret);
        return;
    }
    
    // 创建套接字,并判断是否成功
    if((s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
    {
        printf("socket failed with error %d\n"), WSAGetLastError());
        WSACleanup();
        return;
    }

    // 初始化服务端地址信息
    ServerAddr.sin_family = AF_INET;	// 使用ip4
    ServerAddr.sin_port = htons(Port);	// 字节转型,前文有介绍
    // 因为没有其它电脑,也没有安装虚拟机,所有只有使用本机的ip地址
    ServerAddr.sin_addr.S_un.S_ddr = inet_addr("172.0.0.1");	// 将本机ip转为32位无符号整形
    
    // 提示信息
    printf("We are trying to connect to %s:%d...\n", inet_ntoa(ServerAddr.sin_addr), htons(ServerAddr.sin_port));

    // 建立链接(链接服务端),并判断是否成功
    if(connect(s, (SOCKADDR*)&ServerAddr, sizeof(ServerAddr)) == SOCKET_ERROR)
    {
        printf("connect failed with error %d\n", WSAGetLastError());
        closesocket(s);	// 释放套接字
        WSACleanup();	// 清空启动信息
        return;
    }

    // 链接成功提示信息
    printf("Our connection succeeded.\n");
    printf("We will with hello send.\n");
    
    while(1)	// 可以一直发信息
    {
        printf("The data you send is:\n");
        scanf("%s", buf);	// 输入需要发送的数据
        
        // 发送数据,并判断是否失败,返回的是发送了多少数据
        if((Ret = send(s, buf, strlen(buf), 0)) == SOCKET_ERROR)
        {
            printf("send failed with error %d\n", WSAGetLastError());
            closesocket(s);
   	    WSACleanup();
   	    return;
        }

        // 提示发送了多少数据
        printf("We successfully sent %d bytes.\n\n", Ret);
    }
    
    printf("We are closing the connection.\n");
    closesocket(s);
    WSACleanup();

    system("pause");	
}

效果终极演示

先将服务端开启,然后再运行客户端

在这里插入图片描述


作者:浪子花梦
Time:2020.02.15
学海无涯苦作舟,加油!

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐