晨星_剑 2023-07-29 19:16 采纳率: 25%
浏览 3
已结题

服务器的问题 自己编的

为啥我这个服务器代码老出问题(部分参考博主的代码)

#include "windows.h"
#include "iostream"
#include "process.h"
#include <string>
using namespace std;
#pragma comment(lib, "ws2_32.lib")

void Receive(void* param)
{
    while (1)
    {
        //客户端接受来自服务器的数据
        SOCKET clientSocket = *(SOCKET*)(param);
        char  recvbuf[2048] = {};        //接收缓冲区
        if (recv(clientSocket, recvbuf, 2048, 0) == SOCKET_ERROR)
        {
            cout << "数据接受失败" << endl;
        }
        else
            cout << "【服务器】说:" << recvbuf << endl;
    }
}

void Send(void* param)
{
    while (1)
    {
        //客户端发送数据给服务器
        SOCKET clientSocket = *(SOCKET*)(param);
        char sendbuf[2048] = {};        //发送缓冲区
        cin.getline(sendbuf, 2048);
        if (send(clientSocket, sendbuf, strlen(sendbuf), 0) == SOCKET_ERROR)
        {
            cout << "发送消息失败!";
        }
        else
            cout << "【自己】说:" << sendbuf << endl;
    }
}

int main()
{
    cout << "-----------客户端-----------" << endl;
    WSADATA  wsa;
    if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
    {
        cout << "套接字初始化失败!" << endl;
    }
    SOCKET clientSocket;
    if ((clientSocket = socket(AF_INET, SOCK_STREAM, 0)) == SOCKET_ERROR)
    {
        cout << "套接字创建失败!" << endl;
    }
    struct sockaddr_in SeverAddress;        //服务器地址 也就是即将要连接的目标地址
    memset(&SeverAddress, 0, sizeof(sockaddr_in));
    SeverAddress.sin_family = AF_INET;
    SeverAddress.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");  //127.0.0.1表示本机ip地址
    SeverAddress.sin_port = htons(5000);//设定端口号

    //开始连接
    if (connect(clientSocket, (sockaddr*)&SeverAddress, sizeof(SeverAddress)) == SOCKET_ERROR)
    {
        cout << "客户端:和服务器连接失败!" << endl;
        return 0;
    }
    else
        cout << "与服务器连接成功!" << endl;

    //创建两个子线程
    _beginthread(Receive, 0, &clientSocket);
    //_beginthread(Send, 0, &clientSocket);

    Sleep(INFINITE);    //这里采用另外一种技术避免主线程执行完退出——使其无限期休眠
    //    关闭socket
    if (clientSocket != INVALID_SOCKET) {
        closesocket(clientSocket);
        clientSocket = INVALID_SOCKET;
    }

    //    终止
    WSACleanup();
    cout << "客户端退出!" << endl;
    return 0;
}


期待你的回答

  • 写回答

4条回答 默认 最新

  • 喝茶品人生 2023-07-29 19:30
    关注

    你主线程都没退出,发送线程还注释掉了这是想做什么

    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 8月15日
  • 专家已采纳回答 8月7日
  • 创建了问题 7月29日

悬赏问题

  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真
  • ¥15 关于#c语言#的问题,请各位专家解答!
  • ¥15 这个如何解决详细步骤