美文网首页
关于WinSocket的学习

关于WinSocket的学习

作者: Jornathon | 来源:发表于2017-09-24 18:06 被阅读0次

以下代码是TCP协议在winsocket下的实现,在vs2013下运行有效。

服务器部分代码:

    #include <stdio.h>
    #include <winSock2.h>

    #pragma comment(lib, "ws2_32.lib")

    int main()
    {
        /*------------定义变量------------*/
        char sendBuff[100], recvBuff[100];                                  //定义发送和接受字符串数组
        int sendLen, recvLen;                                               //定义发送和接受字符长度

        SOCKET socketSend;                                                  //定义套接字
        SOCKADDR_IN srvAddr;                                                //服务器地址信息结构体
        WORD wVersionRequest;                                               //unsigned short
        WSADATA wsaData;                                                    //winsocket 版本信息
        int error;                                                          //定义错误

        /*---------初始化套接字库---------*/
        //定义版本类型,将两个字节组合成一个网络字节序,前面是低字节,后面是高字节(网络字节序采用高字节序,CPU采用低字节序)
        wVersionRequest = MAKEWORD(2, 2);
        if (WSAStartup(wVersionRequest, &wsaData) != 0)
        {
            printf("套接字版本库初始化失败!\n");
        }
        if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
        {
            printf("版本不符!\n");
            WSACleanup();
            return 0;
        }
        /*---------设置服务器地址---------*/
        srvAddr.sin_family = AF_INET;
        srvAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
        srvAddr.sin_port = htons(8888);

        /*-----------创建套接字-----------*/
        socketSend = socket(AF_INET, SOCK_STREAM, 0);

        /*-----向服务器发出connect连接----*/
        if (connect(socketSend, (SOCKADDR *)&srvAddr, sizeof(SOCKADDR)) == SOCKET_ERROR)
        {
            printf("连接失败!\n");
        }
        while (1)
        {
            /*------发送数据-------*/
            printf("Please Enter Message:\n");
            //scanf_s("%s", sendBuff, 100);
            gets_s(sendBuff, 100);
            if (send(socketSend, sendBuff, 100, 0) < 0)
            {
                printf("发送失败!\n");
            }
            /*------接收数据-------*/
            if (recv(socketSend, recvBuff, 100, 0) < 0)
            {
                printf("接收失败!\n程序退出\n");
                break;
            }
            else
            {
                printf("Server says:%s\n", recvBuff);
            }
    
        }
        closesocket(socketSend);
        WSACleanup();
        return 0;
    }

客户端部分代码:

    #include <stdio.h>
    #include <winSock2.h>

    #pragma comment(lib, "ws2_32.lib")

    int main()
    {
        /*------------定义变量------------*/
        char sendBuff[100], recvBuff[100];                                  //定义发送和接受字符串数组
        int sendLen, recvLen;                                               //定义发送和接受字符长度

        SOCKET socketSend;                                                  //定义套接字
        SOCKADDR_IN srvAddr;                                                //服务器地址信息结构体
        WORD wVersionRequest;                                               //unsigned short
        WSADATA wsaData;                                                    //winsocket 版本信息
        int error;                                                          //定义错误

        /*---------初始化套接字库---------*/
        //定义版本类型,将两个字节组合成一个网络字节序,前面是低字节,后面是高字节(网络字节序采用高字节序,CPU采用低字节序)
        wVersionRequest = MAKEWORD(2, 2);
        if (WSAStartup(wVersionRequest, &wsaData) != 0)
        {
            printf("套接字版本库初始化失败!\n");
        }
        if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
        {
            printf("版本不符!\n");
            WSACleanup();
            return 0;
        }
        /*---------设置服务器地址---------*/
        srvAddr.sin_family = AF_INET;
        srvAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
        srvAddr.sin_port = htons(8888);

        /*-----------创建套接字-----------*/
        socketSend = socket(AF_INET, SOCK_STREAM, 0);

        /*-----向服务器发出connect连接----*/
        if (connect(socketSend, (SOCKADDR *)&srvAddr, sizeof(SOCKADDR)) == SOCKET_ERROR)
        {
            printf("连接失败!\n");
        }
        while (1)
        {
            /*------发送数据-------*/
            printf("Please Enter Message:\n");
            //scanf_s("%s", sendBuff, 100);
            gets_s(sendBuff, 100);
            if (send(socketSend, sendBuff, 100, 0) < 0)
            {
                printf("发送失败!\n");
            }
            /*------接收数据-------*/
            if (recv(socketSend, recvBuff, 100, 0) < 0)
            {
                printf("接收失败!\n程序退出\n");
                break;
            }
            else
            {
                printf("Server says:%s\n", recvBuff);
            }
    
        }
        closesocket(socketSend);
        WSACleanup();
        return 0;
    }

相关文章

  • 关于WinSocket的学习

    以下代码是TCP协议在winsocket下的实现,在vs2013下运行有效。 服务器部分代码: 客户端部分代码:

  • MSYS 下winsocket 简单使用

    server.cpp#include #include using namespa...

  • WinSocket实现进程通信的一个简单实例

    Windows下通过Socket可以使进程之间产生通信。设计上简单地分为服务端和客户端。 服务端代码: 客户端代码...

  • 关于学习的学习

    2018年3月24日 周六,在长沙市天心区图书馆会议室,我参加了一场长沙市培训文化志愿者的讲座,讲座上毛老...

  • 关于学习的学习

    众所周知,在当今时代,个人之间最大的竞争力在于学习能力的强弱。社会瞬息万变,铁饭碗已经成为上个时代的名称,一门技能...

  • 关于学习的学习

    这个世界最不缺少的就是学习者。不论是主动还是被动,不论是学文化还是获取技能,人们都在学习。在清华、北大和人大,培训...

  • 关于学习的学习

    本周读了三本关于学习的书《终身成长》《终身学习》《知识大迁移》,对学习有了些新认知,做个复盘总结。 一、学习的四个...

  • 关于学习的学习

    现在的孩子太苦了。身为一名老师,眼见的许多孩子很认真的读书,可一考试,成绩惨不忍睹。这样的孩子,你都不好意思批评他...

  • 关于学习的学习

    下午两点,公司大群里面发了消息,因为园区停水,大家可以收拾收拾回家了。 办公室里立刻活跃起来,有几个人立刻就付诸行...

  • 关于学习的

    每次见到姚姐时,都收货颇丰,尤其是她教孩子的学习方法。她女儿没报课外班,全靠她自己督促孩子学习。姚姐白天上班,晚上...

网友评论

      本文标题:关于WinSocket的学习

      本文链接:https://www.haomeiwen.com/subject/sntlextx.html