c++Socket简单通信服务器端

#include <WinSock2.h>  
#include <stdio.h>  
#include <stdlib.h>  
#include <thread>
#include<iostream>
#include <Windows.h>
#include <string>


#pragma comment(lib, "ws2_32.lib")  //链接到ws2_32动态链接库

void s(SOCKET &sockConn){
    char buf[100]="Server:This is server!";
    int n = 1;
    while (n>0){
        int n = send(sockConn, buf, sizeof(buf), 0);
        if (n == -1)
            break;
        std::string s;
        std::cin >> s;
        s.insert(0, "Server:");
        strcpy(buf, s.c_str());

    }
}

void main()
{
    WSADATA wsaData;
    int port = 5099;


    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
    {
        printf("Failed to load Winsock");
        return;
    }

    //创建用于监听的套接字  
    SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0);

    SOCKADDR_IN addrSrv;
    addrSrv.sin_family = AF_INET;
    addrSrv.sin_port = htons(port); //1024以上的端口号  
    addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

    int retVal = bind(sockSrv, (LPSOCKADDR)&addrSrv, sizeof(SOCKADDR_IN));
    if (retVal == SOCKET_ERROR){
        printf("Failed bind:%d\n", WSAGetLastError());
        return;
    }

    if (listen(sockSrv, 10) == SOCKET_ERROR){
        printf("Listen failed:%d", WSAGetLastError());
        return;
    }

    SOCKADDR_IN addrClient;
    int len = sizeof(SOCKADDR);
    while (1){

        //等待客户请求到来    
        SOCKET sockConn = accept(sockSrv, (SOCKADDR *)&addrClient, &len);
        if (sockConn == SOCKET_ERROR){
            printf("Accept failed:%d", WSAGetLastError());
            break;
        }
        //显示Client的IP。

        printf("Accept client IP:[%s]\n", inet_ntoa(addrClient.sin_addr));

        //发送数据  
        std::thread t(s, sockConn);
        t.detach();

        //接收数据 
        char recvBuf[100];
        memset(recvBuf, 0, sizeof(recvBuf));
        int n = 1;
        while (n>0){
            n=recv(sockConn, recvBuf, sizeof(recvBuf), 0);
            if (n == -1){
                std::string i = "Client haved exit!";
            strcpy(recvBuf, i.c_str());
            }

            printf("%s\n", recvBuf);
        }
        closesocket(sockConn);
    }
system("pause");
    closesocket(sockSrv);
    WSACleanup();

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值