Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallo zusammen

In meinem Programm Empfange ich einen Broadcast jedoch liefert mir ReceiveFrom nur 4 chars zurück


OnReceive(int nErrorCode) {
[INDENT]

const READLEN = 4096;

TCHAR buff[READLEN + 1];

CString strSockAddr;

UINT uSocketPort;

int nRead = ReceiveFrom(buff, READLEN, strSockaddr, uSocketPort

[/INDENT]


}

Warum gibt er mir nur 4 zeichen zurück?? ich habe ja READLEN auf 4096 definiert also sollte er mir auch soviele zeichen zurückgeben und per WireShark hab ich gesehen das die ganze Nachricht ankommt

Freundliche grüsse

Neo336

Hat niemand eine Idee woran das liegen könnte?
Bitte kein Threadpushing, siehe Boardregeln. Wenn du meinst, dass dein Thread zusätzliche Aufmerksamkeit benötigt, wende dich an einen zuständigen Moderator.

Zum Problem: nRead ist nach dem Aufruf also 4? Oder woraus folgerst du, dass du nur 4 Zeichen empfängst?

  • Autor

ja habe ich


bool CAsyncSocket::InitBroadcastSocket() {

    int flag = 1;

    DWORD dw;

    sin.sin_family = AF_INET;

    sin.sin_port = htins(30718);

    this->Create(30718, SOCK_DGRAM);

    this->SetSockOpt(SO_BROADCAST, &flag, sizeof(flag));

    dw = GetLastError();

    if(dw != 0) return false;

    return true

}

  • Autor

oke habe ich schnell geändert


bool CAsyncSocket::InitBroadcastSocket() {

    int flag = 1;

    DWORD dw;

    sin.sin_family = AF_INET;

    sin.sin_port = htins(30718);

    bool b1 = this->Create(30718, SOCK_DGRAM);

    bool b2 = this->SetSockOpt(SO_BROADCAST, &flag, sizeof(flag));

    if(!b1 | !b2 )  {

        dw = GetLastError();

        if(dw != 0) return false;

    }

    return true

}


die Rückgabewerte b1 & b2 sind beide true

  • Autor

ich habe mich da schon mal umgesehen bin jetzt aber nochmal durchgegangen und da ist mir etwas ins auge gestochen kann gerade aber nicht sagen wie weit das mit meinem problem einen zusammenhabg hat


#include "stdafx.h"

#include "AsyncServer.h"

#include "ConnectS.h"



#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif


/////////////////////////////////////////////////////////////////////////////

// CConnectSoc


CConnectSoc::CConnectSoc()

{

m_nBytesSent = m_nSendDataLen = 0;

m_nRecvDataLen = sizeof(int);   // initialize for 4 byte data length <-!!!!!!

m_nBytesRecv = 0;

m_bReadDataLength = TRUE;

}

  • Autor


m_nRecvDataLen = sizeof(int);   // initialize for 4 byte data length <-!!!!!!

das m_nRecvDataLen wird beim Windows beispiel nachher beim Receive gebraucht wie mein READLEN also könnt ihr den quote vergessen.

das ist wohl nur zufall das die den gleich auf 4 gesetzt haben.

Ich habe das ganze auch noch mit Receive anstat ReceiveFrom versucht da werden auch nur 4 zurückgegeben benutze ich den selben code jedoch um eine TCP IP nachricht zu empfangen läuft es perfekt, es wird die ganze nachricht empfagen egal ob mit Receive oder ReceiveFrom.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.