<?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[Probleme mit Socket-Komunikation]]></title><description><![CDATA[<p>moin</p>
<p>ich bin grad dabei meine komunikation umzuschreiben weil es vorher ein paar probleme gab...</p>
<p>meine jetztige version liefert mir unverständliche ergebnisse:<br />
ist etwas mehr da ich whireshark logs + ausgabe meines programms + programmcode mit poste aber so bekommt ihr vielleicht nen eindruck von dem was ich machen will ...</p>
<p>also prizipell geht es darum eine drucker der firma wolke zu sagen das der drucker verschiedene sachen machen soll : label laden drucker starten sind nur 2 der dinge die er machen soll : wir kümmern uns mal nur um drucker starten ...<br />
dies geschieht indem ich das kommando F2&lt;04&gt; an den drucker schicke (ip des druckers: 172.16.19.101 meine ip: 172.16.20.27 port der komunikation: 7</p>
<p>ich habe 2 routinen: 1 zum senden 1 zum empfangen:</p>
<p>senden:</p>
<pre><code>static bool SendBlock(int soc, char *buffer,int size)  {	
	char *r;
	int len=0;
	r = buffer;
	long rc=0;
	while(size&gt;0){
		if((len=send(soc,r,size,0)) == -1)  {
			return true;
		}
		size -= len;
		r += len;
	}
	return true;
}
</code></pre>
<p>empfangen:</p>
<pre><code>int ReceiveFromClient(int soc)
{
	CACS400App* pApp = (CACS400App*)AfxGetApp();
    char buffer[1024];
    pApp-&gt;message = &quot;&quot;;
    int bytes;
	CString tmp=&quot;&quot;;
    do
    {
        bytes = recv(soc, buffer, sizeof(buffer) - 1, 0);

        // Alles ok
        if (bytes &gt; 0)
        {   
            // Datenmüll löschen
            buffer[bytes] = '\0';
            for (int i = 0; i &lt; sizeof(buffer) - 1; i++){
				tmp.Format(&quot;%x_&quot;, buffer[i-1]);
                pApp-&gt;message += tmp;
			}
            return 0;
        }
    }
    while (bytes &gt; 0);

    if (bytes == -1) {
	    // Fehler beim Empfangen
        return 1;
    } else if (bytes == 0){
	    // Verbindung getrennt
        return 2;
	}else{
        return 0;
	}
}
</code></pre>
<p>aufruf dieser routine:</p>
<pre><code>if(cmd.CompareNoCase(&quot;WOLKE_ON&quot;)==0){
		int len=0;
		CString cmd=&quot;&quot;;
		CString cmd_return=&quot;&quot;;
		CString cmd_return_soll=&quot;31 04&quot;;

		cmd=&quot;F2&quot;;

		CString cmd_erg;
		cmd_erg=cmd+&quot;&quot;+ConvertStringHexToChar(&quot;04&quot;);
		len=cmd.GetLength()+2;
		char * buf = new char[len];
		memcpy(buf,cmd_erg, len);

		ret=SendBlock(s, buf,len);

		int re=ReceiveFromClient(s);
		if(re==0){
			if(message.CompareNoCase(cmd_return_soll)!=0){
				ret=FALSE;
				CString meldung;
				meldung.Format(&quot;Fehler: %s&quot;,message);
				AfxMessageBox(meldung);
			}else{
				ret=TRUE;
				CString meldung;
				meldung.Format(&quot;Kein Fehler: %s&quot;,message);
				AfxMessageBox(meldung);
			}
		}
		//delete[] recvbuffer;		
		delete[] buf;
	}
</code></pre>
<p>^^ die letzte routine ist noch nicht ganz fertig aber zunm testen reicht sie...<br />
so wenn ich das nun hintereinander ausführe bekomm ich in meinem programm folgende ausgabe:</p>
<p><a href="http://www.bilder-space.de/show_img.php?img=d3bd89-1303196539.jpg&amp;size=original" rel="nofollow">http://www.bilder-space.de/show_img.php?img=d3bd89-1303196539.jpg&amp;size=original</a></p>
<p>im whiresharke siet das wir folgt aus:</p>
<p>F2&lt;04&gt;:</p>
<p>0000 00 50 c2 3f 08 c1 00 19 db 63 55 8b 08 00 45 00 .P.?.... .cU...E.<br />
0010 00 2c cf 4f 40 00 80 06 ab db ac 10 14 1b ac 10 .,.O@... ........<br />
0020 13 65 06 13 00 07 c2 f9 24 0c 1a 20 7a 0d 50 18 .e...... $.. z.P.<br />
0030 fb f5 68 b2 00 00 46 32 04 00 ..h...F2 ..</p>
<p>Antwort: (1&lt;04&gt;)<br />
0000 00 19 db 63 55 8b 00 50 c2 3f 08 c1 08 00 45 00 ...cU..P .?....E.<br />
0010 00 2a 00 31 00 00 40 06 fa fc ac 10 13 65 ac 10 .*.1..@. .....e..<br />
0020 14 1b 00 07 06 13 1a 20 7a 0d c2 f9 24 10 50 18 ....... z...$.P.<br />
0030 11 1b 6c b9 00 00 31 04 00 00 00 00 ..l...1. ....</p>
<p>TCP:</p>
<p>0000 00 50 c2 3f 08 c1 00 19 db 63 55 8b 08 00 45 00 .P.?.... .cU...E.<br />
0010 00 28 cf 52 40 00 80 06 ab dc ac 10 14 1b ac 10 .(.R@... ........<br />
0020 13 65 06 13 00 07 c2 f9 24 10 1a 20 7a 0f 50 10 .e...... $.. z.P.<br />
0030 fb f3 b2 ec 00 00 ......</p>
<p>im whireshark wird unterteilt nach gesendet / empfangen / irgendwelcher anderer kram und im gesendet und empfangen gibt es nen bereich echo. in dem steht genau das was ich brauche ... wir bekomm ich mein programm nun dazu ebenfals nur das zu nehmen was ich reinschreibe bzw was der drucker mir zurück schreibt ... ohne daten müll...</p>
<p>vielen dank für eure hilfe<br />
mfg LT</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/285369/probleme-mit-socket-komunikation</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 10:27:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/285369.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Apr 2011 07:06:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit Socket-Komunikation on Tue, 19 Apr 2011 07:06:34 GMT]]></title><description><![CDATA[<p>moin</p>
<p>ich bin grad dabei meine komunikation umzuschreiben weil es vorher ein paar probleme gab...</p>
<p>meine jetztige version liefert mir unverständliche ergebnisse:<br />
ist etwas mehr da ich whireshark logs + ausgabe meines programms + programmcode mit poste aber so bekommt ihr vielleicht nen eindruck von dem was ich machen will ...</p>
<p>also prizipell geht es darum eine drucker der firma wolke zu sagen das der drucker verschiedene sachen machen soll : label laden drucker starten sind nur 2 der dinge die er machen soll : wir kümmern uns mal nur um drucker starten ...<br />
dies geschieht indem ich das kommando F2&lt;04&gt; an den drucker schicke (ip des druckers: 172.16.19.101 meine ip: 172.16.20.27 port der komunikation: 7</p>
<p>ich habe 2 routinen: 1 zum senden 1 zum empfangen:</p>
<p>senden:</p>
<pre><code>static bool SendBlock(int soc, char *buffer,int size)  {	
	char *r;
	int len=0;
	r = buffer;
	long rc=0;
	while(size&gt;0){
		if((len=send(soc,r,size,0)) == -1)  {
			return true;
		}
		size -= len;
		r += len;
	}
	return true;
}
</code></pre>
<p>empfangen:</p>
<pre><code>int ReceiveFromClient(int soc)
{
	CACS400App* pApp = (CACS400App*)AfxGetApp();
    char buffer[1024];
    pApp-&gt;message = &quot;&quot;;
    int bytes;
	CString tmp=&quot;&quot;;
    do
    {
        bytes = recv(soc, buffer, sizeof(buffer) - 1, 0);

        // Alles ok
        if (bytes &gt; 0)
        {   
            // Datenmüll löschen
            buffer[bytes] = '\0';
            for (int i = 0; i &lt; sizeof(buffer) - 1; i++){
				tmp.Format(&quot;%x_&quot;, buffer[i-1]);
                pApp-&gt;message += tmp;
			}
            return 0;
        }
    }
    while (bytes &gt; 0);

    if (bytes == -1) {
	    // Fehler beim Empfangen
        return 1;
    } else if (bytes == 0){
	    // Verbindung getrennt
        return 2;
	}else{
        return 0;
	}
}
</code></pre>
<p>aufruf dieser routine:</p>
<pre><code>if(cmd.CompareNoCase(&quot;WOLKE_ON&quot;)==0){
		int len=0;
		CString cmd=&quot;&quot;;
		CString cmd_return=&quot;&quot;;
		CString cmd_return_soll=&quot;31 04&quot;;

		cmd=&quot;F2&quot;;

		CString cmd_erg;
		cmd_erg=cmd+&quot;&quot;+ConvertStringHexToChar(&quot;04&quot;);
		len=cmd.GetLength()+2;
		char * buf = new char[len];
		memcpy(buf,cmd_erg, len);

		ret=SendBlock(s, buf,len);

		int re=ReceiveFromClient(s);
		if(re==0){
			if(message.CompareNoCase(cmd_return_soll)!=0){
				ret=FALSE;
				CString meldung;
				meldung.Format(&quot;Fehler: %s&quot;,message);
				AfxMessageBox(meldung);
			}else{
				ret=TRUE;
				CString meldung;
				meldung.Format(&quot;Kein Fehler: %s&quot;,message);
				AfxMessageBox(meldung);
			}
		}
		//delete[] recvbuffer;		
		delete[] buf;
	}
</code></pre>
<p>^^ die letzte routine ist noch nicht ganz fertig aber zunm testen reicht sie...<br />
so wenn ich das nun hintereinander ausführe bekomm ich in meinem programm folgende ausgabe:</p>
<p><a href="http://www.bilder-space.de/show_img.php?img=d3bd89-1303196539.jpg&amp;size=original" rel="nofollow">http://www.bilder-space.de/show_img.php?img=d3bd89-1303196539.jpg&amp;size=original</a></p>
<p>im whiresharke siet das wir folgt aus:</p>
<p>F2&lt;04&gt;:</p>
<p>0000 00 50 c2 3f 08 c1 00 19 db 63 55 8b 08 00 45 00 .P.?.... .cU...E.<br />
0010 00 2c cf 4f 40 00 80 06 ab db ac 10 14 1b ac 10 .,.O@... ........<br />
0020 13 65 06 13 00 07 c2 f9 24 0c 1a 20 7a 0d 50 18 .e...... $.. z.P.<br />
0030 fb f5 68 b2 00 00 46 32 04 00 ..h...F2 ..</p>
<p>Antwort: (1&lt;04&gt;)<br />
0000 00 19 db 63 55 8b 00 50 c2 3f 08 c1 08 00 45 00 ...cU..P .?....E.<br />
0010 00 2a 00 31 00 00 40 06 fa fc ac 10 13 65 ac 10 .*.1..@. .....e..<br />
0020 14 1b 00 07 06 13 1a 20 7a 0d c2 f9 24 10 50 18 ....... z...$.P.<br />
0030 11 1b 6c b9 00 00 31 04 00 00 00 00 ..l...1. ....</p>
<p>TCP:</p>
<p>0000 00 50 c2 3f 08 c1 00 19 db 63 55 8b 08 00 45 00 .P.?.... .cU...E.<br />
0010 00 28 cf 52 40 00 80 06 ab dc ac 10 14 1b ac 10 .(.R@... ........<br />
0020 13 65 06 13 00 07 c2 f9 24 10 1a 20 7a 0f 50 10 .e...... $.. z.P.<br />
0030 fb f3 b2 ec 00 00 ......</p>
<p>im whireshark wird unterteilt nach gesendet / empfangen / irgendwelcher anderer kram und im gesendet und empfangen gibt es nen bereich echo. in dem steht genau das was ich brauche ... wir bekomm ich mein programm nun dazu ebenfals nur das zu nehmen was ich reinschreibe bzw was der drucker mir zurück schreibt ... ohne daten müll...</p>
<p>vielen dank für eure hilfe<br />
mfg LT</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051458</guid><dc:creator><![CDATA[LordTerra]]></dc:creator><pubDate>Tue, 19 Apr 2011 07:06:34 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Socket-Komunikation on Tue, 19 Apr 2011 07:28:43 GMT]]></title><description><![CDATA[<p>ok fehler 1: es stand noch irgendwelcher müss in meinem feld...<br />
daher kam es zu so ner seltsamen rückgabe...</p>
<p>fehler 2: i-1 anzufangen ... ok den code hab ich von hier aus dem forum ... na ok<br />
hab ich übersehn ...</p>
<p>fehler 3: ich wurd sagen die for schleife im recivefromclient darf nicht bis buffersize laufen sondern bis bytes</p>
<p>ist das so richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051464</guid><dc:creator><![CDATA[LordTerra]]></dc:creator><pubDate>Tue, 19 Apr 2011 07:28:43 GMT</pubDate></item></channel></rss>