Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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++聊天应用程序,但它不起作用。 所以基本上我只想输入一个昵称,然后连接到masterserver。我们将不胜感激。谢谢大家! #pragma comment(lib, "Ws2_32.lib") #include <WinSock2.h> #include <Windows.h> #include <iostream> #include <string> using namespace std; SOCKADDR_IN addr; SOCKET sConnect; // For this we need to send two information at one time: // 1. The main message // 2. The ID // To send more than one information I will use a struct struct Buffer { string ID; char Message[256]; }; int ClientThread() { Buffer sbuffer; char buffer[sizeof(sbuffer)] = {0}; for(;; Sleep(10)) { // The server will send a struct to the client // containing message and ID // But send only accepts a char as buffer parameter // so here we need to recv a char buffer and then // we copy the content of this buffer to our struct if(recv(sConnect, buffer, sizeof(sbuffer), NULL)) { memcpy(&sbuffer, buffer, sizeof(sbuffer)); cout << "<Client " << sbuffer.ID << ":> " << sbuffer.Message <<endl; } } return 0; } int main() { system("cls"); int RetVal = 0; WSAData wsaData; WORD DllVersion = MAKEWORD(2,1); RetVal = WSAStartup(DllVersion, &wsaData); if(RetVal != 0) { MessageBoxA(NULL, "Winsock startup failed", "Error", MB_OK | MB_ICONERROR); exit(1); } sConnect = socket(AF_INET, SOCK_STREAM, NULL); addr.sin_addr.s_addr = inet_addr("127.0.0.1"); addr.sin_port = htons(1234); addr.sin_family = AF_INET; cout << "Connect to Masterserver? [ENTER]" <<endl; getchar(); RetVal = connect(sConnect, (SOCKADDR*)&addr, sizeof(addr)); if(RetVal != 0) { MessageBoxA(NULL, "Could not connect to server", "Error", MB_OK | MB_ICONERROR); main(); } else { string ID; cout << "What is your name?" << endl; cin >> ID; cout << "Connected" <<endl; CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE) ClientThread, NULL, NULL, NULL); for(;; Sleep(10)) { char* buffer = new char[256]; ZeroMemory(buffer, 256); cin >> buffer; getchar(); send(sConnect, buffer, 256, NULL); } } return 0; } #pragma注释(lib,“Ws2_32.lib”) #包括 #包括 #包括 #包括 使用名称空间std; 地址中的SOCKADDR_; 插座连接; //为此,我们需要一次发送两个信息: // 1. 主要信息 // 2. 身份证 //要发送多个信息,我将使用struct 结构缓冲区 { 字符串ID; 字符消息[256]; }; int ClientThread() { 缓冲器; 字符缓冲区[sizeof(sbuffer)]={0}; 睡眠(10) { //服务器将向客户端发送一个结构 //包含消息和ID //但是send只接受char作为缓冲区参数 //所以这里我们需要接收一个字符缓冲区,然后 //我们将这个缓冲区的内容复制到我们的结构中 if(recv(连接、缓冲区、sizeof(sbuffer)、NULL)) { memcpy(&sbuffer,buffer,sizeof(sbuffer)); cout_C++_Chat - Fatal编程技术网

如何在C++;聊天应用程序? 所以我制作了这个C++聊天应用程序,但它不起作用。 所以基本上我只想输入一个昵称,然后连接到masterserver。我们将不胜感激。谢谢大家! #pragma comment(lib, "Ws2_32.lib") #include <WinSock2.h> #include <Windows.h> #include <iostream> #include <string> using namespace std; SOCKADDR_IN addr; SOCKET sConnect; // For this we need to send two information at one time: // 1. The main message // 2. The ID // To send more than one information I will use a struct struct Buffer { string ID; char Message[256]; }; int ClientThread() { Buffer sbuffer; char buffer[sizeof(sbuffer)] = {0}; for(;; Sleep(10)) { // The server will send a struct to the client // containing message and ID // But send only accepts a char as buffer parameter // so here we need to recv a char buffer and then // we copy the content of this buffer to our struct if(recv(sConnect, buffer, sizeof(sbuffer), NULL)) { memcpy(&sbuffer, buffer, sizeof(sbuffer)); cout << "<Client " << sbuffer.ID << ":> " << sbuffer.Message <<endl; } } return 0; } int main() { system("cls"); int RetVal = 0; WSAData wsaData; WORD DllVersion = MAKEWORD(2,1); RetVal = WSAStartup(DllVersion, &wsaData); if(RetVal != 0) { MessageBoxA(NULL, "Winsock startup failed", "Error", MB_OK | MB_ICONERROR); exit(1); } sConnect = socket(AF_INET, SOCK_STREAM, NULL); addr.sin_addr.s_addr = inet_addr("127.0.0.1"); addr.sin_port = htons(1234); addr.sin_family = AF_INET; cout << "Connect to Masterserver? [ENTER]" <<endl; getchar(); RetVal = connect(sConnect, (SOCKADDR*)&addr, sizeof(addr)); if(RetVal != 0) { MessageBoxA(NULL, "Could not connect to server", "Error", MB_OK | MB_ICONERROR); main(); } else { string ID; cout << "What is your name?" << endl; cin >> ID; cout << "Connected" <<endl; CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE) ClientThread, NULL, NULL, NULL); for(;; Sleep(10)) { char* buffer = new char[256]; ZeroMemory(buffer, 256); cin >> buffer; getchar(); send(sConnect, buffer, 256, NULL); } } return 0; } #pragma注释(lib,“Ws2_32.lib”) #包括 #包括 #包括 #包括 使用名称空间std; 地址中的SOCKADDR_; 插座连接; //为此,我们需要一次发送两个信息: // 1. 主要信息 // 2. 身份证 //要发送多个信息,我将使用struct 结构缓冲区 { 字符串ID; 字符消息[256]; }; int ClientThread() { 缓冲器; 字符缓冲区[sizeof(sbuffer)]={0}; 睡眠(10) { //服务器将向客户端发送一个结构 //包含消息和ID //但是send只接受char作为缓冲区参数 //所以这里我们需要接收一个字符缓冲区,然后 //我们将这个缓冲区的内容复制到我们的结构中 if(recv(连接、缓冲区、sizeof(sbuffer)、NULL)) { memcpy(&sbuffer,buffer,sizeof(sbuffer)); cout

如何在C++;聊天应用程序? 所以我制作了这个C++聊天应用程序,但它不起作用。 所以基本上我只想输入一个昵称,然后连接到masterserver。我们将不胜感激。谢谢大家! #pragma comment(lib, "Ws2_32.lib") #include <WinSock2.h> #include <Windows.h> #include <iostream> #include <string> using namespace std; SOCKADDR_IN addr; SOCKET sConnect; // For this we need to send two information at one time: // 1. The main message // 2. The ID // To send more than one information I will use a struct struct Buffer { string ID; char Message[256]; }; int ClientThread() { Buffer sbuffer; char buffer[sizeof(sbuffer)] = {0}; for(;; Sleep(10)) { // The server will send a struct to the client // containing message and ID // But send only accepts a char as buffer parameter // so here we need to recv a char buffer and then // we copy the content of this buffer to our struct if(recv(sConnect, buffer, sizeof(sbuffer), NULL)) { memcpy(&sbuffer, buffer, sizeof(sbuffer)); cout << "<Client " << sbuffer.ID << ":> " << sbuffer.Message <<endl; } } return 0; } int main() { system("cls"); int RetVal = 0; WSAData wsaData; WORD DllVersion = MAKEWORD(2,1); RetVal = WSAStartup(DllVersion, &wsaData); if(RetVal != 0) { MessageBoxA(NULL, "Winsock startup failed", "Error", MB_OK | MB_ICONERROR); exit(1); } sConnect = socket(AF_INET, SOCK_STREAM, NULL); addr.sin_addr.s_addr = inet_addr("127.0.0.1"); addr.sin_port = htons(1234); addr.sin_family = AF_INET; cout << "Connect to Masterserver? [ENTER]" <<endl; getchar(); RetVal = connect(sConnect, (SOCKADDR*)&addr, sizeof(addr)); if(RetVal != 0) { MessageBoxA(NULL, "Could not connect to server", "Error", MB_OK | MB_ICONERROR); main(); } else { string ID; cout << "What is your name?" << endl; cin >> ID; cout << "Connected" <<endl; CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE) ClientThread, NULL, NULL, NULL); for(;; Sleep(10)) { char* buffer = new char[256]; ZeroMemory(buffer, 256); cin >> buffer; getchar(); send(sConnect, buffer, 256, NULL); } } return 0; } #pragma注释(lib,“Ws2_32.lib”) #包括 #包括 #包括 #包括 使用名称空间std; 地址中的SOCKADDR_; 插座连接; //为此,我们需要一次发送两个信息: // 1. 主要信息 // 2. 身份证 //要发送多个信息,我将使用struct 结构缓冲区 { 字符串ID; 字符消息[256]; }; int ClientThread() { 缓冲器; 字符缓冲区[sizeof(sbuffer)]={0}; 睡眠(10) { //服务器将向客户端发送一个结构 //包含消息和ID //但是send只接受char作为缓冲区参数 //所以这里我们需要接收一个字符缓冲区,然后 //我们将这个缓冲区的内容复制到我们的结构中 if(recv(连接、缓冲区、sizeof(sbuffer)、NULL)) { memcpy(&sbuffer,buffer,sizeof(sbuffer)); cout,c++,chat,C++,Chat,至于您的问题,您实际上没有将id发送到服务器,因此服务器永远不会知道它 你还有几个其他问题:在客户端输入发送循环中,你将新的C++流输入与旧的C文件< /代码>输入混合在一起。这会导致这两个系统完全不同和分离的问题。此外,我建议你使用“代码> STD::String 代替输入,也可以使用。 该循环中的另一个问题是,无论用户输入多少,您总是发送256字节 和第三个非常严重的问题是,每个循环中泄漏256个字节。C++不是垃圾收集,分配的东西必须释放。这也是使用 STD::String < /C> >

至于您的问题,您实际上没有将id发送到服务器,因此服务器永远不会知道它

你还有几个其他问题:在客户端输入发送循环中,你将新的C++流输入与旧的C<代码>文件< /代码>输入混合在一起。这会导致这两个系统完全不同和分离的问题。此外,我建议你使用“代码> STD::String 代替输入,也可以使用。 该循环中的另一个问题是,无论用户输入多少,您总是发送256字节

和第三个非常严重的问题是,每个循环中泄漏256个字节。C++不是垃圾收集,分配的东西必须释放。这也是使用<代码> STD::String < /C> >的另一个原因。


最后,在读取或发送时不检查错误,这意味着如果用户按EOF键序列(Windows上按CTRL-Z,Linux/OSX上按CTRL-D)你也永远不会知道它。你也不会检查错误,无论是发送还是接收,你也不检查一个关闭的连接。< /P>客户端如何给出他们的昵称?因为没有代码,你的代码将无法编译。看起来你不太理解C++的基础知识。我们也不知道什么是代码。“用C++制作的聊天应用程序”看起来像是,而我们不是通灵者,因此一小段相关代码可能会有所帮助。从一个简单的项目开始。如果你不知道如何要求昵称,你还没有准备好构建聊天应用程序。