socket_TCP

1、服务端

#include <WinSock2.h>
#include<Windows.h>
#include <process.h>
#include <vector>

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

SOCKET socket_Client = INVALID_SOCKET;

unsigned __stdcall recvThreadFunc(void * lParam)
{
    char recvBuf[MAXBYTE] = {0};
    while (true)
    {
        if (recv(socket_Client, recvBuf, MAXBYTE, 0) == SOCKET_ERROR)
            break;

        printf("Recv : %s\r\n", recvBuf);
    }
    
    return 0;
}

int main()
{
    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData))
        return -1;
    if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion != 2))
        return -1;
    printf("Server access ... \r\n");

    SOCKET socket_Server = socket(AF_INET, SOCK_STREAM, 0);
    if (socket_Server == INVALID_SOCKET)
        return -1;

    sockaddr_in sockaddr_in_Server, sockaddr_in_Client;
    sockaddr_in_Server.sin_family = AF_INET;
    sockaddr_in_Server.sin_port = htons(1234);
    sockaddr_in_Server.sin_addr.S_un.S_un_b.s_b1 = 127;
    sockaddr_in_Server.sin_addr.S_un.S_un_b.s_b2 = 0;
    sockaddr_in_Server.sin_addr.S_un.S_un_b.s_b3 = 0;
    sockaddr_in_Server.sin_addr.S_un.S_un_b.s_b4 = 1;


    if (bind(socket_Server, (sockaddr *)&sockaddr_in_Server, sizeof(sockaddr_in_Server)) == SOCKET_ERROR)
        return -1;

    if (listen(socket_Server, 1) == SOCKET_ERROR)
        return -1;

    char recvBuf[MAXBYTE] = {0};
    char sendBuf[MAXBYTE] = {0};
    int sockaddr_in_Len = sizeof(sockaddr_in);

    std::vector<HANDLE> vecThreadHandle;

    while (true)
    {
        socket_Client = accept(socket_Server, (sockaddr *)&sockaddr_in_Client, &sockaddr_in_Len);
        if (socket_Client == SOCKET_ERROR)
            break;
        printf("%d.%d.%d.%d\t%d\r\n", sockaddr_in_Client.sin_addr.S_un.S_un_b.s_b1, sockaddr_in_Client.sin_addr.S_un.S_un_b.s_b2
            , sockaddr_in_Client.sin_addr.S_un.S_un_b.s_b3, sockaddr_in_Client.sin_addr.S_un.S_un_b.s_b4, sockaddr_in_Client.sin_port);

        HANDLE hRecvThread = (HANDLE)_beginthreadex(nullptr, 0, recvThreadFunc, nullptr, NULL, nullptr);
        if (hRecvThread != INVALID_HANDLE_VALUE)
            vecThreadHandle.push_back(hRecvThread);
    }


    for each (auto var in vecThreadHandle)
    {
        CloseHandle(var);
    }

    closesocket(socket_Client);
    closesocket(socket_Server);
    WSACleanup();
    return 0;
}

2、客户端

#include <WinSock2.h>
#include<Windows.h>

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

int main()
{
    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData))
        return -1;
    if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion != 2))
        return -1;
    printf("Client access ... \r\n");

    SOCKET socket_Client = socket(AF_INET, SOCK_STREAM, 0);
    if (socket_Client == INVALID_SOCKET)
        return -1;

    sockaddr_in sockaddr_in_Client;
    sockaddr_in_Client.sin_family = AF_INET;
    sockaddr_in_Client.sin_port = htons(1234);
    sockaddr_in_Client.sin_addr.S_un.S_un_b.s_b1 = 127;
    sockaddr_in_Client.sin_addr.S_un.S_un_b.s_b2 = 0;
    sockaddr_in_Client.sin_addr.S_un.S_un_b.s_b3 = 0;
    sockaddr_in_Client.sin_addr.S_un.S_un_b.s_b4 = 1;

    if (connect(socket_Client, (sockaddr *)&sockaddr_in_Client, sizeof(sockaddr_in_Client)) == SOCKET_ERROR)
        return -1;

    char recvBuf[MAXBYTE] = {0};
    char sendBuf[MAXBYTE] = {0};
    int sockaddr_in_Len = sizeof(sockaddr_in);

    while (true)
    {
        scanf_s("%s", sendBuf, MAXBYTE);
        if (strcmp(sendBuf, "exit") == 0)
            break;
        if (send(socket_Client, sendBuf, strlen(sendBuf) + sizeof(char), 0) == SOCKET_ERROR)
            break;
    }


    closesocket(socket_Client);
    WSACleanup();
    return 0;
}

 

posted @ 2017-10-26 20:23  _xiaohaige  阅读(133)  评论(0编辑  收藏  举报