ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

网络编程--TCP套接字(C/CC++)

2022-01-22 18:31:24  阅读:206  来源: 互联网

标签:SOCKADDR err -- C++ wsaData TCP wVersion sin addrs CC++|(预处理详解)


效果图 可实现自由通讯

 

客户端:

#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include <WinSock2.h>
#include <iostream>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")

int main(void)
{
    while (1)
    {
        char sendBuf[50];// = "hello word!";
        scanf("%s", sendBuf);
        WORD wVersion;
        WSADATA wsaData;
        int err;

        wVersion = MAKEWORD(1, 1);
        err = WSAStartup(wVersion, &wsaData);

        if (err != 0) return err;

        if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
        {
            WSACleanup();
            return-1;
        }

        //创建套接字
        SOCKET sockCli = socket(AF_INET, SOCK_STREAM, 0);

        SOCKADDR_IN addrs;
        addrs.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
        addrs.sin_family = AF_INET;
        addrs.sin_port = htons(5000);

        //向服务器发起连接请求
        connect(sockCli, (SOCKADDR*)&addrs, sizeof(SOCKADDR));

        //接收数据
        char recvBuf[100];
        recv(sockCli, recvBuf, 100, 0);
        std::cout << recvBuf << std::endl;

        //发送数据
        send(sockCli, sendBuf, 100, 0);

        closesocket(sockCli);
        WSACleanup();

        std::cin.get();
}
    
    return 0;
}

服务端:

#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")

int main(void)
{
    //加载套接字库
    WORD wVersionRequested;//版本要求
    WSADATA wsaData;
    int err;

    wVersionRequested = MAKEWORD(1, 1);//版本
    //初始化套接字库
    err = WSAStartup(wVersionRequested, &wsaData);

    if (err != 0)  return err;

    if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) return -1;//低字节 高字节

    //新建套接字

    SOCKET sockS = socket(AF_INET, SOCK_STREAM, 0);//AF_INET IPV4    SOCK_STREAM == TCP
    SOCKADDR_IN addrs;
    addrs.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //htonl    字节顺序
    addrs.sin_family = AF_INET;//IPV4
    addrs.sin_port = htons(5000);//端口号

    //绑定套接字到本地IP,
    bind(sockS, (SOCKADDR*)&addrs, sizeof(SOCKADDR));

    //开始监听
    listen(sockS, 5);

    SOCKADDR_IN addrCil;
    int len = sizeof(SOCKADDR);

    while (true)
    {
        //接收客户连接
        SOCKET sockConn = accept(sockS, (SOCKADDR*)&addrCil, &len);
        char sendBuf[100];
        sprintf_s(sendBuf, 100, "Welcome %s to qiniu!", inet_ntoa(addrCil.sin_addr));

        //发送数据
        send(sockConn, sendBuf, strlen(sendBuf) + 1, 0);

        char recvBuf[100];
        //接收数据
        recv(sockConn, recvBuf, 100, 0);

        std::cout << recvBuf << std::endl;
        closesocket(sockConn);
    }
    closesocket(sockS);
    WSACleanup();

    return 0;
}

 

标签:SOCKADDR,err,--,C++,wsaData,TCP,wVersion,sin,addrs,CC++|(预处理详解)
来源: https://www.cnblogs.com/WU20/p/15834722.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有