Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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_Winapi - Fatal编程技术网

C++ 显示窗口后,如何检查插座连接?

C++ 显示窗口后,如何检查插座连接?,c++,sockets,winapi,C++,Sockets,Winapi,我跟随了youtube上关于win32 socket编程的教程。在我尝试实现win32 winapi应用程序之前,它一直运行良好,现在当我单击Debug(运行应用程序)时,没有应用程序运行 #include "Resource.h" #include <tchar.h> #include <Windows.h> #pragma comment(lib, "Ws2_32.lib") void AppendText(const HWND &hwnd, TCHAR *

我跟随了youtube上关于win32 socket编程的教程。在我尝试实现win32 winapi应用程序之前,它一直运行良好,现在当我单击Debug(运行应用程序)时,没有应用程序运行

#include "Resource.h"
#include <tchar.h>
#include <Windows.h>
#pragma comment(lib, "Ws2_32.lib")

void AppendText(const HWND &hwnd, TCHAR *newText) {
    HWND hwndOutput = GetDlgItem(hwnd, IDC_OUTPUT);
    int outLength = GetWindowTextLength(hwndOutput) + lstrlen(newText) + 1;
    TCHAR * buf = (TCHAR *)GlobalAlloc(GPTR, outLength * sizeof(TCHAR));
    if (!buf) return;
    GetWindowText(hwndOutput, buf, outLength);
    _tcscat_s(buf, outLength, newText);
    SetWindowText(hwndOutput, buf);
    GlobalFree(buf);
}

LRESULT CALLBACK MsgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    switch (msg) {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    case WM_CREATE:
    {
                      HWND hServEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 10, 10, 370, 150, hwnd, (HMENU)MAKEINTRESOURCE(IDC_OUTPUT), NULL, NULL);

                      WSADATA wsa;
                      WORD Version = MAKEWORD(2, 1);
                      WSAStartup(Version, &wsa);

                      SOCKET Listen = socket(AF_INET, SOCK_STREAM, NULL);
                      SOCKET Connect = socket(AF_INET, SOCK_STREAM, NULL);
                      SOCKADDR_IN Server;

                      Server.sin_addr.s_addr = inet_addr("127.0.0.1");
                      Server.sin_family = AF_INET;
                      Server.sin_port = htons(100);

                      bind(Listen, (SOCKADDR*)&Server, sizeof(Server));
                      listen(Listen, 1);

                      int size = sizeof(Server);
                      AppendText(hwnd, "Listening..\r\n");

                      for (;;) {
                          if (Connect = accept(Listen, (SOCKADDR*)&Server, &size)) {
                              AppendText(hwnd, "Connection was reached\r\n");
                              break;
                          }
                      }
                      WSACleanup();
                      return 0;
    }
        break;
    default:
        return DefWindowProc(hwnd, msg, wParam, lParam);
    }
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) {
    WNDCLASSEX wc;
    wc.cbClsExtra = 0;
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.cbWndExtra = 0;
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    wc.hInstance = hInstance;
    wc.lpfnWndProc = MsgProc;
    wc.lpszClassName = "Main_Window";
    wc.lpszMenuName = NULL;
    wc.style = 0;

    if (!RegisterClassEx(&wc)) {
        MessageBox(NULL, "Failed to register window class.", "Error", MB_OK | MB_ICONERROR);
        return 0;
    }

    HWND hwnd = CreateWindowEx(0, "Main_Window", "Server", WS_OVERLAPPEDWINDOW, 200, 100, 400, 200, NULL, NULL, hInstance, NULL);

    if (!hwnd) {
        MessageBox(NULL, "Failed to create window.", "Error", MB_OK | MB_ICONERROR);
        return 0;
    }

    ShowWindow(hwnd, SW_SHOW);
    UpdateWindow(hwnd);

    MSG msg;
    ZeroMemory(&msg, sizeof(msg));

    while (msg.message != WM_QUIT) {
        if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    return 0;
}
#包括“Resource.h”
#包括
#包括
#pragma注释(lib,“Ws2_32.lib”)
void AppendText(常量HWND&HWND,TCHAR*newText){
HWND hwnoutput=GetDlgItem(HWND,IDC_输出);
int outLength=GetWindowTextLength(hwnOutput)+lstrlen(newText)+1;
TCHAR*buf=(TCHAR*)GlobalAlloc(GPTR,outLength*sizeof(TCHAR));
如果(!buf)返回;
GetWindowText(HwnOutput、buf、outLength);
_tcscat_s(buf、outLength、newText);
SetWindowText(HwnOutput,buf);
全球自由度(buf);
}
LRESULT回调MsgProc(HWND HWND,UINT msg,WPARAM WPARAM,LPARAM LPARAM){
开关(msg){
案例WM_销毁:
PostQuitMessage(0);
打破
案例WM_创建:
{
HWND hServEdit=CreateWindowEx(WS_EX_CLIENTEDGE,“EDIT”,WS|CHILD,WS|u VISIBLE,WS|u VSCROLL,WS|u HSCROLL,ES|u MULTILINE,ES|u AUTOVSCROLL,10,10,370,150,HWND,(HMENU)MAKEINTRESOURCE(IDC|u输出),NULL,NULL);
WSADATA wsa;
单词版本=MAKEWORD(2,1);
WSAStartup(版本和wsa);
SOCKET Listen=SOCKET(AF_INET,SOCK_STREAM,NULL);
SOCKET Connect=SOCKET(AF\u INET,SOCK\u STREAM,NULL);
服务器中的SOCKADDR_;
Server.sin_addr.s_addr=inet_addr(“127.0.0.1”);
Server.sinu family=AF\u INET;
Server.sin_port=htons(100);
绑定(侦听,(SOCKADDR*)和服务器,sizeof(服务器));
听(听,1);
int size=sizeof(服务器);
附录文本(hwnd,“侦听..\r\n”);
对于(;;){
if(Connect=accept(监听,(SOCKADDR*)服务器和大小)){
AppendText(hwnd,“已连接\r\n”);
打破
}
}
WSACleanup();
返回0;
}
打破
违约:
返回DefWindowProc(hwnd、msg、wParam、lParam);
}
}
int WINAPI WinMain(HINSTANCE HINSTANCE,HINSTANCE,LPSTR,int){
WNDCLASSEX wc;
wc.cbClsExtra=0;
wc.cbSize=sizeof(WNDCLASSEX);
wc.cbWndExtra=0;
wc.hbrBackground=(HBRUSH)(彩色窗口+1);
wc.hCursor=LoadCursor(空,IDC_箭头);
wc.hIcon=LoadIcon(空,IDI_应用程序);
wc.hIconSm=LoadIcon(空,IDI_应用程序);
wc.hInstance=hInstance;
wc.lpfnWndProc=MsgProc;
wc.lpszClassName=“主窗口”;
wc.lpszMenuName=NULL;
wc.style=0;
如果(!RegisterClassEx(&wc)){
MessageBox(NULL,“注册窗口类失败”,“错误”,MB_OK | MB_ICONERROR);
返回0;
}
HWND HWND=CreateWindowEx(0,“主窗口”,“服务器”,WS\u重叠窗口,200100400200,NULL,NULL,hInstance,NULL);
如果(!hwnd){
MessageBox(NULL,“创建窗口失败”,“错误”,MB_OK | MB_ICONERROR);
返回0;
}
展示窗口(hwnd、SW_展示);
更新窗口(hwnd);
味精;
零内存(&msg,sizeof(msg));
while(msg.message!=WM_退出){
if(peek消息(&msg,NULL,0,0,PM_-REMOVE)){
翻译信息(&msg);
发送消息(&msg);
}
}
返回0;
}

编辑控件创建下面的WM_CREATE案例中的代码都是从我观看的教程中复制和粘贴的,并且有效。但是当我实现其他所有东西时,它就不起作用了。我正在使用MS Visual Studio 2013 Express。有人知道为什么这样做行不通吗?

我决定对这些东西进行注释,看看是否能找出问题所在,以及它是否在WM_CREATE的for循环中。我假设它在显示窗口之前检查连接。我怎样才能解决这个问题?请把问题的标题写得更具体一些。“win32 socket编程的问题”不包含有关实际问题的信息,对将来在搜索结果中查找该问题的读者没有多大价值。我们从标签中知道,它是关于Windows套接字,并且您使用C++,所以您标题中剩下的要点是“编程麻烦”,并且不传递任何信息。更具体地了解实际问题也会帮助你更快地得到答案。谢谢。显示后发送到窗口的第一条消息是。如果必须确保在建立连接之前显示窗口,则可以将代码移动到此消息处理程序。不要在事件线程中执行网络代码。启动一个单独的线程。@EJP:提供一个基于事件的API(请参阅),该API已准备好在GUI线程上运行。