C++网络通信 Socket

目录

 

服务端:

客户端:


服务端:

#include

#include  

#include  

#include

#pragma comment(lib,"ws2_32.lib"

#define _WINSOCK_DEPRECATED_NO_WARNINGS 1

using namespace std;

int main(int argc, char* argv[])

{

    //初始化WSA 

    WORD sockVersion = MAKEWORD(2, 2);

    WSADATA wsaData;

    if (WSAStartup(sockVersion, &wsaData) != 0)

    {

        return 0;

    }

    //创建套接字 

    SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

    if (slisten == INVALID_SOCKET)

    {

        printf("socket error !");

        return 0;

    }

    //绑定IP和端口 

    sockaddr_in sin;

    sin.sin_family = AF_INET;

    sin.sin_port = htons(8888);

    sin.sin_addr.S_un.S_addr = INADDR_ANY;

    if (bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)

    {

        printf("bind error !");

    }

    //开始监听 

    if (listen(slisten, 5) == SOCKET_ERROR)

    {

        printf("listen error !");

        return 0;

    }

    //循环接收数据 

    SOCKET sClient;

    sockaddr_in remoteAddr;

    int nAddrlen = sizeof(remoteAddr);

    char revData[255];

    while (true)

    {

        printf("等待连接...\n");

        sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);

        if (sClient == INVALID_SOCKET)

        {

            printf("accept error !");

            continue;

        }

        char ip[100];

        if (inet_ntop(AF_INET, &remoteAddr.sin_addr.S_un.S_addr, ip, 100) == NULL)

        {

            cout << "error" << endl;

            return -1;

        }

        cout << ip << endl; //宽字符记得用宽字符的方式进行输出

        //接收数据 

        int ret = recv(sClient, revData, 255, 0);

        if (ret > 0)

        {

            revData[ret] = 0x00;

            printf(revData);

        }

        //发送数据 

        const char * sendData = "你好,TCP客户端!\n";

        send(sClient, sendData, strlen(sendData), 0);

        closesocket(sClient);

    }

    closesocket(slisten);

    WSACleanup();

    return 0;

}

客户端:

#include

#include

#include

#include

#include

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

#define _WINSOCK_DEPRECATED_NO_WARNINGS 1

using namespace std;

int main()

{

    WORD sockVersion = MAKEWORD(2, 2);

    WSADATA data;

    if (WSAStartup(sockVersion, &data) != 0)

    {

        return 0;

    }

    while (true) {

        SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

        if (sclient == INVALID_SOCKET)

        {

            printf("invalid socket!");

            return 0;

        }

 

        sockaddr_in serAddr;

        serAddr.sin_family = AF_INET;

        serAddr.sin_port = htons(8888);

        inet_pton(AF_INET, "127.0.0.1", &serAddr.sin_addr.S_un.S_addr);

        if (connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)

        {  //连接失败

            printf("connect error !");

            closesocket(sclient);

            return 0;

        }

 

        char data[1024];

        cin >> data;

        const char * sendData;

        sendData = data;   //string转const char*

        //char * sendData = "你好,TCP服务端,我是客户端\n";

        send(sclient, sendData, strlen(sendData), 0);

        //send()用来将数据由指定的socket传给对方主机

        //int send(int s, const void * msg, int len, unsigned int flags)

        //s为已建立好连接的socket,msg指向数据内容,len则为数据长度,参数flags一般设0

        //成功则返回实际传送出去的字符数,失败返回-1,错误原因存于error

        char recData[255];

        int ret = recv(sclient, recData, 255, 0);

        if (ret > 0) {

            recData[ret] = 0x00;

            printf(recData);

        }

        closesocket(sclient);

    }

    WSACleanup();

    return 0;

 

}

 

C++网络通信 Socket_第1张图片

你可能感兴趣的:(C++,c++)