Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 套接字不发送数据_C++_Sockets - Fatal编程技术网

C++ 套接字不发送数据

C++ 套接字不发送数据,c++,sockets,C++,Sockets,我目前正在开发一个即时消息系统,该系统需要服务器和客户端相互通信。 我用C++的默认套接字API尝试了它。 问题是,即使服务器和客户端程序都编译良好,也没有从客户端发送的任何套接字到达服务器 我不知道我在这里做错了什么,我反复检查了我的代码5次,甚至从头再做一次,没有成功。 我使用调试消息来定位问题,它们都与我使用的处理循环有关 //来自服务器的代码 包括 包括 包括 包括 包括 包括 包括 包括 包括 int main { std::locale::globalstd::localefr-FR

我目前正在开发一个即时消息系统,该系统需要服务器和客户端相互通信。 我用C++的默认套接字API尝试了它。 问题是,即使服务器和客户端程序都编译良好,也没有从客户端发送的任何套接字到达服务器

我不知道我在这里做错了什么,我反复检查了我的代码5次,甚至从头再做一次,没有成功。 我使用调试消息来定位问题,它们都与我使用的处理循环有关

//来自服务器的代码 包括 包括 包括 包括 包括 包括 包括 包括 包括 int main { std::locale::globalstd::localefr-FR; WSAData WSAData; 如果wsastartpmakeword2、2和wsaData!=0 { std::cout有几件事:

首先,这是错误的:

send(s, buff.c_str(), 1024, 0)
你基本上是在告诉send它所寻址的缓冲区是一个完整的1kb,然后全部发送。它不知道到底有多少内存是有效的,也不知道终止的字符串

其次,客户端设置错误。不要绑定到客户端套接字;连接就足够了。请注意以下几点:

int res = bind(server, (sockaddr*)&addr, sizeof(addr));
if (res != 0)
{
    std::cout << "Error when binding";
    return -3;
}

if (connect(server, (const sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR)
{
    std::cout << "Erreur when connecting : " << WSAGetLastError() << std::endl;
    return -4;
}

该绑定不应该存在。如果可以建立连接,则连接将绑定到套接字。删除客户端的绑定部分,将缓冲区管理修复为正确,并将closesocket调用放在它们所属的位置,那么您的程序将在功能实现的道路上走得更远。仍然存在一些问题逻辑工作流,b但至少连接会设置得更好。

不幸的是,因为所显示的代码无法满足a的所有要求,所以不太可能有人能够帮助您。请访问stackoverflow.com,并提供有关可回答的好问题的提示。嗨,我不明白为什么它不能满足所有要求,我缺少什么?我我不清楚这是多个源文件还是单个源文件。请划分代码并明确指出哪个源文件包含哪个源文件。我建议您首先尝试在不使用线程的情况下使用简单的客户端和服务器。这样做将帮助您学习使用套接字和套接字API的基础知识。然后了解e select函数,它允许您等待套接字上的某些活动,例如等待读取的数据。您好,谢谢,我将代码分为两部分。如果不使用线程,那么这样做的问题是,我不能同时等待来自服务器的消息和发送我自己的消息,这意味着每次发送消息时,我都会在发送另一个方法之前,我必须等待服务器应答。顺便说一句,我已经阅读了select方法,只是我不知道它是否能帮助我的套接字基本上发送数据。@Soufiane要回答Sam的问题,请查看发布的代码;仅查看发布的代码。如果我们可以复制/粘贴/编译/运行该方法,仅此而已,并生成您的I假设,你有一个真正的复制品。如果你能将复制品剥离为产生相同问题所需的代码,而我们仍然可以复制/粘贴/编译/运行并复制问题,那么现在你就有了一个。例如:我的编译器一看到客户端就呕吐。我不知道那是什么。你知道,但我们不是读心术的人,我们看不见你你的代码。帮助我们帮助你。删除bind语句有助于将客户端链接到服务器,谢谢。但是关于整个kb的事情,如何使它更高效呢?@Soufiane这不是发布的问题。如果你想查看代码,你应该将更新带到。感谢这个网站,如果我用足够的re完成程序,我会尝试一下保养时间。