<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich schreibe gerade an meiner Abschlussarbeit. Dafür muss ich aus Matlab eine Lichtquelle ansteuern, deren API in C++ geschrieben ist.<br />
Aus Kompatibilität läuft das ganze über einen TCP/IP Server.</p>
<p>Wenn ich in Matlab die Lichtquelle ansteuern möchte, übergebe ich zwei Zahlen. Die erste für den Lichtkanal (1-20), die zweite Zahl für die jeweilige Intensität. Also Lichtquelle(5,1000) bedeutet Kanal 5 mit Intensität 1000.</p>
<p>Jetzt meine Frage:<br />
Die recv-Methode erhält ein char-Array der Länge 512.<br />
Wie kann ich nun das char-Array auslesen, so dass ich zwei separate Werte erhalte? Ich komme einfach nicht dahinter.<br />
Wenn ich zum Beispiel Abfrage<br />
if (charArray[0] == '1') Dann klappt es. Sobald die Zahl zweistellig wird, klappt es nicht mehr. Erst recht klappt das nicht, wenn ich zwei Werte übergebe.<br />
Ich brauche aber zwei Werte.<br />
Gibt es da keinen einfachen schnellen Weg oder muss man sich die Werte/Zeichen zusammen basteln?<br />
In der recv-Methode möchte ich dann mit den beiden Werten (z. B. 10 und 1000) eine Methode aufrufen: setLichtquelle(10,1000)</p>
<p>Ich habe leider nicht so viel Ahnung von C++. Ich hatte lediglich ein bisschen Java in der Uni, aber da war ich nie gut.</p>
<p>Ich hoffe es kann mir jemand helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/327430/char-array-auslesen-in-recv-methode-vom-tcp-ip-server-c</link><generator>RSS for Node</generator><lastBuildDate>Wed, 08 Jul 2026 23:52:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327430.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 11 Aug 2014 14:38:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Mon, 11 Aug 2014 14:38:31 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich schreibe gerade an meiner Abschlussarbeit. Dafür muss ich aus Matlab eine Lichtquelle ansteuern, deren API in C++ geschrieben ist.<br />
Aus Kompatibilität läuft das ganze über einen TCP/IP Server.</p>
<p>Wenn ich in Matlab die Lichtquelle ansteuern möchte, übergebe ich zwei Zahlen. Die erste für den Lichtkanal (1-20), die zweite Zahl für die jeweilige Intensität. Also Lichtquelle(5,1000) bedeutet Kanal 5 mit Intensität 1000.</p>
<p>Jetzt meine Frage:<br />
Die recv-Methode erhält ein char-Array der Länge 512.<br />
Wie kann ich nun das char-Array auslesen, so dass ich zwei separate Werte erhalte? Ich komme einfach nicht dahinter.<br />
Wenn ich zum Beispiel Abfrage<br />
if (charArray[0] == '1') Dann klappt es. Sobald die Zahl zweistellig wird, klappt es nicht mehr. Erst recht klappt das nicht, wenn ich zwei Werte übergebe.<br />
Ich brauche aber zwei Werte.<br />
Gibt es da keinen einfachen schnellen Weg oder muss man sich die Werte/Zeichen zusammen basteln?<br />
In der recv-Methode möchte ich dann mit den beiden Werten (z. B. 10 und 1000) eine Methode aufrufen: setLichtquelle(10,1000)</p>
<p>Ich habe leider nicht so viel Ahnung von C++. Ich hatte lediglich ein bisschen Java in der Uni, aber da war ich nie gut.</p>
<p>Ich hoffe es kann mir jemand helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413000</guid><dc:creator><![CDATA[baronsocke]]></dc:creator><pubDate>Mon, 11 Aug 2014 14:38:31 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Mon, 11 Aug 2014 15:21:30 GMT]]></title><description><![CDATA[<p>Hier ein kleines Bsp. um darauf aufzubauen:</p>
<pre><code>#include &lt;vector&gt;
#include &lt;cstdint&gt;
#include &lt;cstring&gt;
#include &lt;exception&gt;
#include &lt;iostream&gt;

struct buffer_too_small
    : virtual std::exception
{};

using buffer_t = std::vector&lt;std::uint8_t&gt;;

void write_int(buffer_t&amp; buffer, int value)
{
    auto offset = buffer.size();
    buffer.resize(offset + sizeof(value));
    std::memcpy(buffer.data() + offset, &amp;value, sizeof(value));
}

void read_int(buffer_t&amp; buffer, int&amp; value)
{
    if (buffer.size() &lt; sizeof(value))
    {
        throw buffer_too_small();
    }

    auto offset = buffer.size() - sizeof(value);
    std::memcpy(&amp;value, buffer.data() + offset, sizeof(value));
    buffer.resize(offset);
}

int main()
{
    buffer_t buffer;
    {
        write_int(buffer, 10);
        write_int(buffer, 1000);
    }

    {
        int m = 0;
        int n = 0;

        read_int(buffer, m);
        read_int(buffer, n);

        std::cout &lt;&lt; &quot;m=&quot; &lt;&lt; m &lt;&lt; &quot;, n=&quot; &lt;&lt; n &lt;&lt; std::endl;
    }
}
</code></pre>
<p><em>Edit:</em><br />
Natürlich hängt das Auspacken der Werte (hier read) vollständig davon ab wie sie eingepackt wurden (hier write). Die Frage ist also: Wie wurden deine Werte also abgefüllt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413008</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Mon, 11 Aug 2014 15:21:30 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Mon, 11 Aug 2014 15:20:07 GMT]]></title><description><![CDATA[<p>Zuerst wäre es nötig zu wissen, in welcher Form diese zwei Zahlen übermittelt werden. Sind es zwei 16, 32. 64-bit ints? big- oder little-endian? Sind es tatsächlich ASCII-Zeichen? Wenn ASCII-Zeichen: Wie wird bestimmt wo die erste Zahl aufhört und die Zweite anfängt? Trenner oder feste Zeichenanzahl?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413009</guid><dc:creator><![CDATA[tkausl]]></dc:creator><pubDate>Mon, 11 Aug 2014 15:20:07 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Mon, 11 Aug 2014 16:01:51 GMT]]></title><description><![CDATA[<p>Am besten wäre es, wenn ich zwei ganz einfache Integer Zahlen übergebe.</p>
<p>Ich habe in Matlab eine Klasse der Lichtquelle. In dieser spreche ich den TCP/IP Server an. Ich übergebe dabei zwei Zahlen (Integer) für Kanalnummer und Intensität. Das ganze läuft dann über zwei Bat-Dateien: eine um die Verbindung mit ncat aufzubauen, die andere, um das exe-Programm zu starten.</p>
<p>Das Exe-Programm (in VS mit C++ geschrieben) hat die recv-Methode. und hier brauche ich beide Werte um die Lichtquelle anzuwählen:</p>
<p>setIntensity(kanalID, Intensity). kanalID und Intensity sind zwei ganz normale Integer Werte.</p>
<p>Das Matlab Programm ist eine 32bit Version, Die API der Lichtquelle eine 64bit Version. Deswegen muss ich das auch über den TCP/IP Server machen.</p>
<p>Ist das denn sehr kompliziert? Ich danke Theta für den Code, jedoch kapier ich da leider nicht viel:(</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413011</guid><dc:creator><![CDATA[baronsocke]]></dc:creator><pubDate>Mon, 11 Aug 2014 16:01:51 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Mon, 11 Aug 2014 16:13:07 GMT]]></title><description><![CDATA[<p>Hilft nicht weiter. Du musst wissen, wie die Werte im char-Array liegen. Es gibt viele normale Integer. Da gibt es z.B. short,long,long long,signed char usw... Das Arry hat bestimmt nicht zum Spaß 512 Bytes? Irgendwer muss festgelegt haben, welcher Bereich des Arrays welche Bedeutung hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413012</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Mon, 11 Aug 2014 16:13:07 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Mon, 11 Aug 2014 16:13:46 GMT]]></title><description><![CDATA[<p>Hier die recv-Methode in der exe-datei. Wenn ich in der Konsole zum Beispiel 10,1000 eingebe, gibt er mir für iResult 8 Bytes zurück und die Ausgabe 10,1000</p>
<pre><code>iResult = recv(ClientSocket, recvbuf, recvbuflen,0);
if (iResult&gt;0){
   printf(&quot;Bytes received (iResult): %d/n&quot;, iResult);
   recvbuf[iResult] = '/0';
   printf(recvbuf);
</code></pre>
<p>nun möchte ich es aber wie oben mit zusätzlichen Code-Zeilen haben. Die kanalID und die Intensity muss ich irgendwie aus dem Char-Array recvbuf extrahieren:</p>
<pre><code>iResult = recv(ClientSocket, recvbuf, recvbuflen,0);
if (iResult&gt;0){
   printf(&quot;Bytes received (iResult): %d/n&quot;, iResult);
   recvbuf[iResult] = '/0';
   printf(recvbuf);

   setChannelIntensity(kanalID, Intensity)
</code></pre>
<p>Wenn mir da jemand helfen kann, ihm wäre ich solo zu Dank verpflichtet!:)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413013</guid><dc:creator><![CDATA[baronsocke]]></dc:creator><pubDate>Mon, 11 Aug 2014 16:13:46 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Mon, 11 Aug 2014 16:18:49 GMT]]></title><description><![CDATA[<p>out schrieb:</p>
<blockquote>
<p>Hilft nicht weiter. Du musst wissen, wie die Werte im char-Array liegen. Es gibt viele normale Integer. Da gibt es z.B. short,long,long long,signed char usw... Das Arry hat bestimmt nicht zum Spaß 512 Bytes? Irgendwer muss festgelegt haben, welcher Bereich des Arrays welche Bedeutung hat.</p>
</blockquote>
<p>Da habe ich leider keine Ahnung von. Nützt es dir, wenn ich den ganzen Code der Exe-adtei poste?<br />
Ich kann mit Sicherheit auch die 512 verändern. Das ist glaube ich ein Standardwert.</p>
<p>Ganz oben im Programm steht:</p>
<pre><code>#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT &quot;27015&quot;
</code></pre>
<p>und</p>
<pre><code>char recvbuf[DEFAULT_BUFLEN];
int recvbuflen = DEFAULT_BUFLEN;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2413014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413014</guid><dc:creator><![CDATA[baronsocke]]></dc:creator><pubDate>Mon, 11 Aug 2014 16:18:49 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Mon, 11 Aug 2014 16:24:54 GMT]]></title><description><![CDATA[<p>Ne <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Schreib mal den Text aus der Dokumentation zu dieser Funktion ab und poste ihn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413015</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Mon, 11 Aug 2014 16:24:54 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Mon, 11 Aug 2014 17:47:57 GMT]]></title><description><![CDATA[<p>Auch auf die Gefahr hin etwas mißverstanden zu haben:<br />
Du musst doch in Matlab irgendwo einen <code>fwrite</code> aufruf haben (<a href="http://www.mathworks.de/de/help/matlab/ref/fwrite.html" rel="nofollow">http://www.mathworks.de/de/help/matlab/ref/fwrite.html</a>).<br />
Daraus ergibt sich doch, wie die Daten formatiert sind?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413025</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Mon, 11 Aug 2014 17:47:57 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Tue, 12 Aug 2014 07:06:14 GMT]]></title><description><![CDATA[<p>Es könnte helfen, wenn du den Inhalt des 512-Bytes grossen Buffers hier postest, nachdem du zwei (ungleiche) bekannte Zahlen auf der Serverseite abgeschickt hast. So kann man allenfalls auf das Format schliessen.</p>
<p>Auch sollte dir bewusst sein, dass <code>recv(..)</code> <strong>maximal</strong> soviel Bytes liest wie der Speicher gross ist - es <strong>kann</strong> auch weniger sein. Es ist dann an der Applikation (=an dir) sicherzustellen, dass z.B. beide Zahlen vollständig vorliegen. Dazu musst du auch wieder wissen, wie der Server die Zahlen versendet, z.B. so wie in meinem Bsp. als 2 x 4 Bytes hintereinander (Endianess mal ignoriert).</p>
<p>@Furble Wurble: Aus der Doku kann ich das Format nicht ablesen, oder habe ich das übersehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413071</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Tue, 12 Aug 2014 07:06:14 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Tue, 12 Aug 2014 07:15:17 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<p>@Furble Wurble: Aus der Doku kann ich das Format nicht ablesen, oder habe ich das übersehen?</p>
</blockquote>
<p>Nee - da hast Du recht. Das habe ich auch nicht gemeint.<br />
Ich meinte, dass wenn er/sie uns den <code>fwrite()</code> Aufruf angibt, den das Matlab-Skript(?) benutzt, wissen wir, wie das Format ist.</p>
<p>Quasi die genaue Form dieses Teils:</p>
<p>baronsocke schrieb:</p>
<blockquote>
<p>Ich habe in Matlab eine Klasse der Lichtquelle. In dieser spreche ich den TCP/IP Server an. Ich übergebe dabei zwei Zahlen (Integer) für Kanalnummer und Intensität.</p>
</blockquote>
<p>Könnte sein, dass das hier schon funktioniert:</p>
<pre><code class="language-cpp">#include &lt;cstdint&gt;
#include &lt;cstring&gt;

void f(){
  // ...
  iResult = recv(ClientSocket, recvbuf, recvbuflen,0);
  if (iResult&gt;0){
    enum{channel, intensity};
    int32_t values[2];
    memcpy(values, recvbuf, sizeof(values));
    setChannelIntensity(values[channel], values[intensity]);
  }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2413072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413072</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Tue, 12 Aug 2014 07:15:17 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Tue, 12 Aug 2014 07:33:44 GMT]]></title><description><![CDATA[<p>Nach der Lektüre <a href="http://www.c-plusplus.net/forum/327430#id2413013" rel="nofollow">dieses</a> Posts denke ich an:</p>
<pre><code>...
int kanalID, Intensity;
char comma;
std::stringstream ss(recvbuf);
ss &gt;&gt; kanalID &gt;&gt; comma &gt;&gt; Intensity;
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2413075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413075</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Tue, 12 Aug 2014 07:33:44 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Tue, 12 Aug 2014 08:22:38 GMT]]></title><description><![CDATA[<p>Caligulaminus schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Könnte sein. Bleibt allerdings noch sicherzustellen, dass die ganze Meldung empfangen wird. Vermutlich wird mit '\0'-terminiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413081</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Tue, 12 Aug 2014 08:22:38 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Wed, 13 Aug 2014 09:46:28 GMT]]></title><description><![CDATA[<p>Also das steht in der Definition (WinSock2.h). Was anderes habe ich nicht gefunden oder was meint ihr mit Dokumentation?</p>
<pre><code>#if INCL_WINSOCK_API_PROTOTYPES
WINSOCK_API_LINKAGE
int
WSAAPI
recv(
    _In_ SOCKET s,
    _Out_writes_bytes_to_(len, return) __out_data_source(NETWORK) char FAR * buf,
    _In_ int len,
    _In_ int flags
    );
#endif /* INCL_WINSOCK_API_PROTOTYPES */
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2413223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413223</guid><dc:creator><![CDATA[baronsocke]]></dc:creator><pubDate>Wed, 13 Aug 2014 09:46:28 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Wed, 13 Aug 2014 10:02:43 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413231</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Wed, 13 Aug 2014 10:02:43 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Wed, 13 Aug 2014 10:20:54 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>Ich kenne mich leider nicht gut damit aus, benötige es aber für meine Abschlussarbeit. Tut mir leid.<br />
Aber ich finde es trotzdem toll und sehr nett von euch, dass ihr mit helft. Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413234</guid><dc:creator><![CDATA[baronsocke]]></dc:creator><pubDate>Wed, 13 Aug 2014 10:20:54 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Wed, 13 Aug 2014 11:28:09 GMT]]></title><description><![CDATA[<p>Moin!</p>
<p>Das Problem, dass es zu lösen gilt: <strong>in welchem Format werden die Daten angeliefert?</strong><br />
Die Daten kommen von Matlab, richtig?<br />
Du hast das Skript* für Matlab geschrieben, richtig?<br />
Irgendwo in dem Skript wird <code>fwrite()</code> aufgerufen, richtig?<br />
Und aus diesem Aufruf ergibt sich, wie die 2 Zahlen codiert sind, die <code>recv()</code> ausliest.<br />
Deswegen wäre die Stelle in dem Matlab-Skript mit <code>fwrite()</code> wichtig.</p>
<p>Einen Schuß in's Blaue habe ich ja in meinem Posting vom 12.08 9:15 mal gemacht. Hast Du das gar ausprobiert?</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title="*)"
      alt="😉"
    /> k.A. ob sich das Skript nennt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413243</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Wed, 13 Aug 2014 11:28:09 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Wed, 13 Aug 2014 12:29:25 GMT]]></title><description><![CDATA[<p>Furble Wurble schrieb:</p>
<blockquote>
<p>Moin!</p>
<p>Das Problem, dass es zu lösen gilt: <strong>in welchem Format werden die Daten angeliefert?</strong><br />
Die Daten kommen von Matlab, richtig?<br />
Du hast das Skript* für Matlab geschrieben, richtig?<br />
Irgendwo in dem Skript wird <code>fwrite()</code> aufgerufen, richtig?<br />
Und aus diesem Aufruf ergibt sich, wie die 2 Zahlen codiert sind, die <code>recv()</code> ausliest.<br />
Deswegen wäre die Stelle in dem Matlab-Skript mit <code>fwrite()</code> wichtig.</p>
<p>Einen Schuß in's Blaue habe ich ja in meinem Posting vom 12.08 9:15 mal gemacht. Hast Du das gar ausprobiert?</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title="*)"
      alt="😉"
    /> k.A. ob sich das Skript nennt.</p>
</blockquote>
<p>Hallo!<br />
Der Lösungsansatz von dir hat leider nicht geklappt. Da passiert gar nichts. Der Lösungsansatz von &quot;Caligulaminus&quot; hat mich aber weiter gebracht. das funktioniert so, wenn ich das Programm in der Konsole laufen lasse! Super.<br />
Jetzt sitze ich gerade an Matlab und versuche das zu implementieren. Ich schaue mal wegen fwrite(). Bis jetzt sehe ich da nichts von.Ansonsten poste ich gleich mal den Matlab Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413250</guid><dc:creator><![CDATA[baronsocke]]></dc:creator><pubDate>Wed, 13 Aug 2014 12:29:25 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Wed, 13 Aug 2014 14:26:09 GMT]]></title><description><![CDATA[<p>Caligulaminus schrieb:</p>
<blockquote>
<p>Nach der Lektüre <a href="http://www.c-plusplus.net/forum/327430#id2413013" rel="nofollow">dieses</a> Posts denke ich an:</p>
<pre><code>...
int kanalID, Intensity;
char comma;
std::stringstream ss(recvbuf);
ss &gt;&gt; kanalID &gt;&gt; comma &gt;&gt; Intensity;
...
</code></pre>
</blockquote>
<p>baronsocke schrieb:</p>
<blockquote>
<p>Der Lösungsansatz von &quot;Caligulaminus&quot; hat mich aber weiter gebracht. das funktioniert so, wenn ich das Programm in der Konsole laufen lasse! Super.</p>
</blockquote>
<p>Da bin ich wohl etwas spät eingestiegen, und habe nicht konzentriert genug gelesen.<br />
Caligulaminus hat das besser gemacht... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Nur aus Neugier: poste doch bitte trotzdem den Matlab-Code, der für das Schreiben verantwortlich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413276</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Wed, 13 Aug 2014 14:26:09 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Wed, 13 Aug 2014 14:47:58 GMT]]></title><description><![CDATA[<p>Hier mein Matlab Code. In einem extra Skript, rufe ich die Klasse Licht auf mit:</p>
<p>obj = Licht (5,1000); //(Kanal = 5, Intensität = 1000)</p>
<pre><code>classdef Licht

    properties

        target   ='E:\msteuerung\Matlab';
        batPath;
        channelID;
        intens;

    end

    methods
            function obj=Licht(channelID,intens)
            if(~exist(obj.target, 'dir'))
                mkdir(obj.target);
            end;
            obj.channelID = channelID;
            obj.intens    = intens;
            obj.batPath   = fileparts( mfilename('fullpath'));

            cmd  = ['sendCmd.bat ' , int2str(channelID),int2str(intens)];

            oldP = pwd; % pwd: identify current folder, returns the current folder as a string to currentFolder
            cd(obj.batPath); % cd(newFolder): change current folder to newFolder
            [ok, res] = system(cmd); % system: execute operating system command and return output
            cd(oldP);
            if(ok==2)
                oldP = pwd;
                cd(obj.batPath);
                system('startServer.bat');
                cd(oldP);
            end;
        end; 
    end  
end
</code></pre>
<p>Die sendCmd.bat Datei ist:</p>
<pre><code>@echo OFF
echo %1 | ncat 127.0.0.1 27015
</code></pre>
<p>Die startServer.bat Datei ist:</p>
<pre><code>@echo off
start &quot;&quot; &quot;cmd /c ConsoleApplication1.exe&quot;
</code></pre>
<p>Wenn ich das ganze ohne Matlab laufen lasse (sondern über die Konsole). Funktioniert es einwandfrei. Beim Aufruf &quot;10,1000&quot; in der Konsole wird der Kanal 10 de Lichtquelle auf Intensität 1000 gestellt.</p>
<p>Wenn ich es nun über Matlab machen möchte funktioniert es noch nicht.<br />
Wenn ich eingebe &quot;5,1000&quot;, dann steht in meiner cmd-datei: 'sendCmd.bat 51000'<br />
Meine Ausgabe:<br />
Bytes received &lt;iResult&gt;: 8<br />
51000<br />
51000<br />
-858993460</p>
<p>Hier habe ich schon alles probiert: Ein Komma zwischen die Zahlen 5 und 1000 bewirkt:<br />
Bytes received &lt;iResult&gt;: 4<br />
5<br />
5<br />
-858993460</p>
<p>Übergebe ich von vornherein einen string im ganzen ('5,1000'), kommt das Gleiche wieder:<br />
Bytes received &lt;iResult&gt;: 4<br />
5<br />
5<br />
-858993460</p>
<p>Ich brauche ein Komma zwischen beiden Werten, da die Lösung von &quot;Caligulaminus&quot; darauf aufbaut.<br />
Es kommen scheinbar nicht alle Bytes an. Für die Werte &quot;5,1000&quot; müssten 7 Bytes ankommen: 6 für die Zeichen und das Schlusssymbol '/0', oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413280</guid><dc:creator><![CDATA[baronsocke]]></dc:creator><pubDate>Wed, 13 Aug 2014 14:47:58 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Wed, 13 Aug 2014 14:50:18 GMT]]></title><description><![CDATA[<p>Und was hat es mit der Zahl</p>
<p>-858993460</p>
<p>am Ende auf sich? Wo kommt die denn her und was bedeutet sie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413281</guid><dc:creator><![CDATA[baronsocke]]></dc:creator><pubDate>Wed, 13 Aug 2014 14:50:18 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Wed, 13 Aug 2014 15:53:19 GMT]]></title><description><![CDATA[<p>Aha.<br />
Warum denn dieser Umweg über ncat? Matlab bietet doch auch tcp/ip an.<br />
Die Lampe ist der Server, oder? Der sollte doch eh laufen....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413291</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Wed, 13 Aug 2014 15:53:19 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Wed, 13 Aug 2014 15:56:21 GMT]]></title><description><![CDATA[<p>baronsocke schrieb:</p>
<blockquote>
<p>Und was hat es mit der Zahl</p>
<p>-858993460</p>
<p>am Ende auf sich? Wo kommt die denn her und was bedeutet sie?</p>
</blockquote>
<p>ist CCCCCCCC in hex. Also vermutlich mal nicht initialisierter Speicher o.ä.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413292</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 13 Aug 2014 15:56:21 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Wed, 13 Aug 2014 16:11:26 GMT]]></title><description><![CDATA[<p>Und was kann ich nun tun, damit die Zahlen richtig in der recv-Methode ankommen? Über die Konsole funktioniert es ja wunderbar. Da gebe ich ja den selben ncat-Befehl ein und danach die Werte 10,1000. Warum klappt das denn nicht in Matlab?<br />
Ich habe auch schon in der sendCmd.bat Datei echo %2 oder echo %3 ausprobiert... Auch nichts.</p>
<p>Ein wissenschaftlicher Mitarbeiter hat das mit ncat eingerichtet. Es funktioniert ja, aber die Zahlen kommen aus Matlab scheinbar noch nicht richtig an:(<br />
Die Lampe müsste der Server sein. Sie erhält über die recv-Methode die Daten.</p>
<p>Liegt es am nicht initialisierten Speicher? Was muss ich dagegen tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413295</guid><dc:creator><![CDATA[baronsocke]]></dc:creator><pubDate>Wed, 13 Aug 2014 16:11:26 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Wed, 13 Aug 2014 16:22:32 GMT]]></title><description><![CDATA[<p>Ich würde sagen, da fehlt die Nullterminierung.<br />
<a href="http://www.c-plusplus.net/forum/327430#id2413013" rel="nofollow">Hier</a> hast Du noch eine drin gehabt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413296</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Wed, 13 Aug 2014 16:22:32 GMT</pubDate></item><item><title><![CDATA[Reply to char-Array auslesen in recv-Methode vom TCP&#x2F;IP Server C++ on Wed, 13 Aug 2014 16:26:42 GMT]]></title><description><![CDATA[<p>Das 0xCCCCCCCC bekommst Du mit Sicherheit weg. Keine Panik.<br />
(Ich hoffe an dieser Stelle, dass man noch normal mit Dir reden kann und du nicht morgen abgeben musst!) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Meinst Du nicht, dass Du es schaffst, tcp/ip direkt aus Matlab anzusprechen? (<a href="http://www.mathworks.de/de/help/instrument/tcpip.html" rel="nofollow">http://www.mathworks.de/de/help/instrument/tcpip.html</a>)<br />
Erwähnten &quot;wissenschaftlichen Mitarbeiter&quot; hättest Du dann schonmal überholt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2413297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2413297</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Wed, 13 Aug 2014 16:26:42 GMT</pubDate></item></channel></rss>