| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | Sende unsgined char over tcp socket Fra : Morten Larsen | 
  Dato :  04-09-05 11:54 |  
  |   
            Jeg har en editor der kan gemme ansi grafik på følgende måde:
 
 #define img_Login_WIDTH =80;
 #define img_Login_DEPTH = 22;
 #define img_Login_LENGTH = 3520;
 unsigned char img_Login [] = {}
 
 Hvordan får jeg sendt arrayet img_Login via en socket?
 
 På forhånd tak.
 
 // Morten 
 
 
  
            
             |   |   
            
        
 
            
         
           Bertel Brander (04-09-2005) 
         
	
            | Kommentar Fra : Bertel Brander | 
  Dato :  04-09-05 15:27 |  
  |  
 
            Morten Larsen wrote:
 > Jeg har en editor der kan gemme ansi grafik på følgende måde:
 > 
 > #define img_Login_WIDTH =80;
 > #define img_Login_DEPTH = 22;
 > #define img_Login_LENGTH = 3520;
 > unsigned char img_Login [] = {}
 > 
 > Hvordan får jeg sendt arrayet img_Login via en socket?
 Du åbner en socket med socket(...)
 Laver en bind med bind(...)
 En connect med connect(...)
 Og sender med send(...) eller sendto(...)
 Hvilken kompiler bruger du og på hvilken platform (windows/linux/...) ?
 Skal array'et sendes rå eller skal der noget IP/http/whatever på?
 Hvad skal modtage array'et?
 Det var måske lettere med en UDP socket?
 -- 
 Absolutely not the best homepage on the net:
 http://home20.inet.tele.dk/midgaard
But it's mine - Bertel
            
              |   |   
            
        
 
            
         
           Morten Larsen (04-09-2005) 
         
	
            | Kommentar Fra : Morten Larsen | 
  Dato :  04-09-05 16:23 |  
  |   
            > Du åbner en socket med socket(...)
 > Laver en bind med bind(...)
 > En connect med connect(...)
 > Og sender med send(...) eller sendto(...)
 
 Jo tak den kender jeg, mend send / sendto forventer en signed char og ikke 
 en unsigned.
 
 > Hvilken kompiler bruger du og på hvilken platform (windows/linux/...) ?
 
 Projektet er multiplatform. Og i windows compiler jeg med borland og linux 
 er det gcc.
 
 > Skal array'et sendes rå eller skal der noget IP/http/whatever på?
 >
 > Hvad skal modtage array'et?
 
 Det skal sendes råt til en telnet klient.
 Hvis jeg bruger send ser det ikke ordentligt ud. Formentlig fordi den skal 
 have en signed char og ikke en unsigned :)
 
 > Det var måske lettere med en UDP socket?
 
 Skal være tcp. 
 
 
  
            
             |   |   
            
        
 
            
         
            Bertel Brander (04-09-2005) 
         
	
            | Kommentar Fra : Bertel Brander | 
  Dato :  04-09-05 18:59 |  
  |  
 
            Morten Larsen wrote:
 >>Du åbner en socket med socket(...)
 >>Laver en bind med bind(...)
 >>En connect med connect(...)
 >>Og sender med send(...) eller sendto(...)
 > 
 > 
 > Jo tak den kender jeg, mend send / sendto forventer en signed char og ikke 
 > en unsigned.
 Hvis problemet kun er signed/unsigned, caster du bare til den rette type
 (og caster tilbage på modtagersiden).
 F.ex:
 send(socket, (const char *)img_Login, SomeLength, Flags);
 -- 
 Absolutely not the best homepage on the net:
 http://home20.inet.tele.dk/midgaard
But it's mine - Bertel
            
              |   |   
            
        
 
            
         
             Morten Larsen (04-09-2005) 
         
	
            | Kommentar Fra : Morten Larsen | 
  Dato :  04-09-05 19:37 |  
  |   
            > Hvis problemet kun er signed/unsigned, caster du bare til den rette type
 > (og caster tilbage på modtagersiden).
 >
 > F.ex:
 > send(socket, (const char *)img_Login, SomeLength, Flags);
 
 Type casting var nu det første jeg prøvede og det virker heller ikke.
 Men der typecastes heller ikke tilbage på modtager siden, da dette er en 
 tilfældig telnet klient, i dette tilfælde
 er det den som følger med operativ systemet.
 
 Via vb.net er det intet problem, at få det ønskede resultat vist i telnet 
 klienten.
 Men jeg vil nu gerne lave dette i c++. Umiddelbart virker det sådan at 
 winsock kun er lavet til at man skal kunne
 sende ASCII tekst over den :) Men der er jo nok noget jeg ikke lige ved på 
 det område.
 
 
  
            
             |   |   
            
        
 
            
         
              Bertel Brander (04-09-2005) 
         
	
            | Kommentar Fra : Bertel Brander | 
  Dato :  04-09-05 22:18 |  
  |  
 
            Morten Larsen wrote:
 >>Hvis problemet kun er signed/unsigned, caster du bare til den rette type
 >>(og caster tilbage på modtagersiden).
 >>
 >>F.ex:
 >>send(socket, (const char *)img_Login, SomeLength, Flags);
 > 
 > 
 > Type casting var nu det første jeg prøvede og det virker heller ikke.
 Måske skulle du have fortalt dette tidligere ?
 > Men der typecastes heller ikke tilbage på modtager siden, da dette er en 
 > tilfældig telnet klient, i dette tilfælde
 > er det den som følger med operativ systemet.
 > 
 > Via vb.net er det intet problem, at få det ønskede resultat vist i telnet 
 > klienten.
 > Men jeg vil nu gerne lave dette i c++. Umiddelbart virker det sådan at 
 > winsock kun er lavet til at man skal kunne
 > sende ASCII tekst over den :) Men der er jo nok noget jeg ikke lige ved på 
 > det område.
 Der burde ikke være noget problem med at sende andet en ASCII tegn over
 en en tcp socket.
 Hvad mener du med at det ikke virker? Hvad modtager telnet klienten
 på den anden side?
 -- 
 Absolutely not the best homepage on the net:
 http://home20.inet.tele.dk/midgaard
But it's mine - Bertel
            
              |   |   
            
        
 
            
         
               Morten Larsen (05-09-2005) 
         
	
            | Kommentar Fra : Morten Larsen | 
  Dato :  05-09-05 11:11 |  
  |  
 
            >> Type casting var nu det første jeg prøvede og det virker heller ikke.
 >
 > Måske skulle du have fortalt dette tidligere ?
 Ja, ok :)
 > Der burde ikke være noget problem med at sende andet en ASCII tegn over
 > en en tcp socket.
 Nej ville jeg heller ikke mene, men er desværre ikke så skrap til cpp endnu 
 :)
 > Hvad mener du med at det ikke virker? Hvad modtager telnet klienten
 > på den anden side?
 I vb.net sender jeg et byte array, indholdet af dette array er tegn med 
 encoding typen ANSI. Jeg sender dette array til telnet klienten, og den får 
 vist et stykke ANSI graffik. Her ser det således ud 
 http://www.thewildplace.dk/dk.edb.programmering.c/vbserv.PNG
Jeg gør i princippet det samme i Cpp, udover at array typen er unsigned 
 char, hvilket vel er det samme som en byte i vb.net.Når telnet klienten 
 modtager data fra min Cpp server applikation, bliver tegne vist forkert. 
 Hvilket er logisk nok da en signed char går fra -128 til +127 (hvis jeg 
 husker korrekt). En unsigned char's range er fra 0 til 255. De tegn jeg 
 bruger ligger i området 0 til 255, og det virker som om nogle af disse 
 værdier går tabt ved typecastet. Og dermed resultere i at skærm billede ser 
 så ledes ud  http://www.thewildplace.dk/dk.edb.programmering.c/cserv.PNG
// Morten
            
              |   |   
            
        
 
            
         
                Michael Rasmussen (05-09-2005) 
         
	
            | Kommentar Fra : Michael Rasmussen | 
  Dato :  05-09-05 11:51 |  
  |  
 
            On Mon, 05 Sep 2005 12:10:51 +0200, Morten Larsen wrote:
 > Jeg gør i princippet det samme i Cpp, udover at array typen er unsigned 
 > char, hvilket vel er det samme som en byte i vb.net.Når telnet klienten 
 > modtager data fra min Cpp server applikation, bliver tegne vist forkert. 
 > Hvilket er logisk nok da en signed char går fra -128 til +127 (hvis jeg 
 > husker korrekt). En unsigned char's range er fra 0 til 255. De tegn jeg 
 > bruger ligger i området 0 til 255, og det virker som om nogle af disse 
 > værdier går tabt ved typecastet. Og dermed resultere i at skærm billede ser 
 > så ledes ud  http://www.thewildplace.dk/dk.edb.programmering.c/cserv.PNG
> 
 Er dit problem ikke snarere, at du sender escape-sekvenser, der håndterer
 farver mv. på din Windowsterminal. Disse escape-sekvenser har ingen
 gyldighed på en Unixterminal - her er escape-sekvenserne anderledes til
 håndtering af farver mv. Prøv at lave en server, der kun sender teksten
 uden escape-sekvenser.
 -- 
 Hilsen/Regards
 Michael Rasmussen
 http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917
            
             |   |   
            
        
 
            
         
                 Morten Larsen (05-09-2005) 
         
	
            | Kommentar Fra : Morten Larsen | 
  Dato :  05-09-05 12:27 |  
  |   
            > Er dit problem ikke snarere, at du sender escape-sekvenser, der håndterer
 > farver mv. på din Windowsterminal. Disse escape-sekvenser har ingen
 > gyldighed på en Unixterminal - her er escape-sekvenserne anderledes til
 > håndtering af farver mv. Prøv at lave en server, der kun sender teksten
 > uden escape-sekvenser.
 
 Problemet er ikke escape sekvenserne, da man før denne login skærm har 
 mulighed for at vælge.
 Selve "skærm siderne" (ansi grafikken). Det er scriptet via lua. Så serveren 
 sender altid en version der passer til dit system. Da jeg dog løb ind i 
 problemet med at få afsendt en unsigned char via wsa i windows, (og 
 forventer også problemet er det samme med sys/socket.h på linux) lavede jeg 
 et hurtig standalone server der kun sender dette login billede og vil først 
 løse dette problem under windows, i min test server. Derefter har jeg en 
 change for at fixe det i selve bbs programmet :)
 
 // Morten 
 
 
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |