/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Streams
Fra : Anders Lybecker


Dato : 25-05-01 13:31

Jeg prøver at få en Java server til at snakke med en vb klient.

På Java serveren bruger jeg en PrintWriter til at sende noget tekst til vb
klienten. vb klienten bruger winsock til at modtage teksten, men her opstår
problemet.

Hvis jeg sender "Hejsa" får jeg "?????" tilbage.

Er der nogen der har en forklaring på dette?

Kan det være fordi jeg bruger en forkert stream?
Og hvordan bruger jeg den stream?

Mvh
Anders



 
 
Lars Rosenberg (25-05-2001)
Kommentar
Fra : Lars Rosenberg


Dato : 25-05-01 22:49

Ud over at der kan være en million fejl i din vb kode som vi ikke kan se,
kan det være et problem at Java tekst er unicode og din vb koden maaske
forventer ascii kode.

Lars


"Anders Lybecker" <anders@lautrupklubben.dk> wrote in message
news:iisP6.420$IM1.240813113@news.mobilixnet.dk...
> Jeg prøver at få en Java server til at snakke med en vb klient.
>
> På Java serveren bruger jeg en PrintWriter til at sende noget tekst til vb
> klienten. vb klienten bruger winsock til at modtage teksten, men her
opstår
> problemet.
>
> Hvis jeg sender "Hejsa" får jeg "?????" tilbage.
>
> Er der nogen der har en forklaring på dette?
>
> Kan det være fordi jeg bruger en forkert stream?
> Og hvordan bruger jeg den stream?
>
> Mvh
> Anders
>
>



Anders Lybecker (25-05-2001)
Kommentar
Fra : Anders Lybecker


Dato : 25-05-01 14:30

> Ud over at der kan være en million fejl i din vb kode som vi ikke kan se,

Ja, det er en mulighed.

> kan det være et problem at Java tekst er unicode og din vb koden maaske
> forventer ascii kode.

Det kan godt ske?
Jeg kan bare godt sende den anden vej, altså fra vb klienten til java
serveren med en InputStreamReader, men ikke den anden vej med en
PrintWriter.

Her er min java kode:

import java.net.*;
import java.io.*;

public class test {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;

try {
serverSocket = new ServerSocket(7);
} catch (IOException e) {
System.err.println("Could not listen on port: 7.");
System.exit(1);
}

Socket clientSocket = null;

try {
clientSocket = serverSocket.accept();
} catch (IOException e) {
System.err.println("Accept failed.");
System.exit(1);
}

PrintWriter out = new PrintWriter(new
OutputStreamWriter(clientSocket.getOutputStream()), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));

String inputLine, outputLine;

while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
outputLine = inputLine;
out.println(outputLine);
}
out.close();
in.close();
clientSocket.close();
serverSocket.close();
}
}

Hvordan fortæller jeg så streamen at jeg sender ascii?

Og min vb-kode hvis du vil tjekke den: :)

Private Sub Connect_Click()
Winsock1.RemoteHost = "10.0.0.2"
Winsock1.RemotePort = 7

Winsock1.Connect

Do Until Winsock1.State = sckConnected
DoEvents: DoEvents: DoEvents: DoEvents
Loop
MsgBox ("Connected")
End Sub

Private Sub Close_Click()
Winsock1.Close
End Sub

Private Sub Send_Click()
Winsock1.SendData (txtSend)
End Sub

Private Sub winsock1_dataarrival(ByVal bytestotal As Long)
Dim incomming
Winsock1.GetData incomming
txtRecive = CStr(incomming) & vbCrLf
End Sub

Det kan jo ikke blive mere simpelt. Men der er alligevel en fejl et eller
andet sted.

Hilsen
Anders



Lars Rosenberg (26-05-2001)
Kommentar
Fra : Lars Rosenberg


Dato : 26-05-01 17:21

Din outputstreamwriter kan du init med

OutputStreamWriter(clientSocket.getOutputStream(),US-ASCII)
Det skulle gøre at der skrives med ascii kodning

Lars


"Anders Lybecker" <anders@lautrupklubben.dk> wrote in message
news:s9tP6.422$7i2.241823815@news.mobilixnet.dk...
> > Ud over at der kan være en million fejl i din vb kode som vi ikke kan
se,
>
> Ja, det er en mulighed.
>
> > kan det være et problem at Java tekst er unicode og din vb koden maaske
> > forventer ascii kode.
>
> Det kan godt ske?
> Jeg kan bare godt sende den anden vej, altså fra vb klienten til java
> serveren med en InputStreamReader, men ikke den anden vej med en
> PrintWriter.
>
> Her er min java kode:
>
> import java.net.*;
> import java.io.*;
>
> public class test {
> public static void main(String[] args) throws IOException {
> ServerSocket serverSocket = null;
>
> try {
> serverSocket = new ServerSocket(7);
> } catch (IOException e) {
> System.err.println("Could not listen on port: 7.");
> System.exit(1);
> }
>
> Socket clientSocket = null;
>
> try {
> clientSocket = serverSocket.accept();
> } catch (IOException e) {
> System.err.println("Accept failed.");
> System.exit(1);
> }
>
> PrintWriter out = new PrintWriter(new
> OutputStreamWriter(clientSocket.getOutputStream()), true);
> BufferedReader in = new BufferedReader(
> new InputStreamReader(clientSocket.getInputStream()));
>
> String inputLine, outputLine;
>
> while ((inputLine = in.readLine()) != null) {
> System.out.println(inputLine);
> outputLine = inputLine;
> out.println(outputLine);
> }
> out.close();
> in.close();
> clientSocket.close();
> serverSocket.close();
> }
> }
>
> Hvordan fortæller jeg så streamen at jeg sender ascii?
>
> Og min vb-kode hvis du vil tjekke den: :)
>
> Private Sub Connect_Click()
> Winsock1.RemoteHost = "10.0.0.2"
> Winsock1.RemotePort = 7
>
> Winsock1.Connect
>
> Do Until Winsock1.State = sckConnected
> DoEvents: DoEvents: DoEvents: DoEvents
> Loop
> MsgBox ("Connected")
> End Sub
>
> Private Sub Close_Click()
> Winsock1.Close
> End Sub
>
> Private Sub Send_Click()
> Winsock1.SendData (txtSend)
> End Sub
>
> Private Sub winsock1_dataarrival(ByVal bytestotal As Long)
> Dim incomming
> Winsock1.GetData incomming
> txtRecive = CStr(incomming) & vbCrLf
> End Sub
>
> Det kan jo ikke blive mere simpelt. Men der er alligevel en fejl et eller
> andet sted.
>
> Hilsen
> Anders
>
>



Lars Rosenberg (26-05-2001)
Kommentar
Fra : Lars Rosenberg


Dato : 26-05-01 17:41

us-ascii skal selvfølgelig være "us-ascii".

Winsocket blev på et tidspunkt udvidet med unicode support, i C++ kom der
flere metoder (ala. metoder der klarer char og metoder der klarer wchar), så
du skal måske bare bruge nogle andre metoder i vb.

Lars

"Lars Rosenberg" <latex_rules@hotmail.com> wrote in message
news:3b0f58cf$0$9994$ba624c82@nntp01.dk.telia.net...
> Din outputstreamwriter kan du init med
>
> OutputStreamWriter(clientSocket.getOutputStream(),US-ASCII)
> Det skulle gøre at der skrives med ascii kodning
>
> Lars
>
>
> "Anders Lybecker" <anders@lautrupklubben.dk> wrote in message
> news:s9tP6.422$7i2.241823815@news.mobilixnet.dk...
> > > Ud over at der kan være en million fejl i din vb kode som vi ikke kan
> se,
> >
> > Ja, det er en mulighed.
> >
> > > kan det være et problem at Java tekst er unicode og din vb koden
maaske
> > > forventer ascii kode.
> >
> > Det kan godt ske?
> > Jeg kan bare godt sende den anden vej, altså fra vb klienten til java
> > serveren med en InputStreamReader, men ikke den anden vej med en
> > PrintWriter.
> >
> > Her er min java kode:
> >
> > import java.net.*;
> > import java.io.*;
> >
> > public class test {
> > public static void main(String[] args) throws IOException {
> > ServerSocket serverSocket = null;
> >
> > try {
> > serverSocket = new ServerSocket(7);
> > } catch (IOException e) {
> > System.err.println("Could not listen on port: 7.");
> > System.exit(1);
> > }
> >
> > Socket clientSocket = null;
> >
> > try {
> > clientSocket = serverSocket.accept();
> > } catch (IOException e) {
> > System.err.println("Accept failed.");
> > System.exit(1);
> > }
> >
> > PrintWriter out = new PrintWriter(new
> > OutputStreamWriter(clientSocket.getOutputStream()), true);
> > BufferedReader in = new BufferedReader(
> > new InputStreamReader(clientSocket.getInputStream()));
> >
> > String inputLine, outputLine;
> >
> > while ((inputLine = in.readLine()) != null) {
> > System.out.println(inputLine);
> > outputLine = inputLine;
> > out.println(outputLine);
> > }
> > out.close();
> > in.close();
> > clientSocket.close();
> > serverSocket.close();
> > }
> > }
> >
> > Hvordan fortæller jeg så streamen at jeg sender ascii?
> >
> > Og min vb-kode hvis du vil tjekke den: :)
> >
> > Private Sub Connect_Click()
> > Winsock1.RemoteHost = "10.0.0.2"
> > Winsock1.RemotePort = 7
> >
> > Winsock1.Connect
> >
> > Do Until Winsock1.State = sckConnected
> > DoEvents: DoEvents: DoEvents: DoEvents
> > Loop
> > MsgBox ("Connected")
> > End Sub
> >
> > Private Sub Close_Click()
> > Winsock1.Close
> > End Sub
> >
> > Private Sub Send_Click()
> > Winsock1.SendData (txtSend)
> > End Sub
> >
> > Private Sub winsock1_dataarrival(ByVal bytestotal As Long)
> > Dim incomming
> > Winsock1.GetData incomming
> > txtRecive = CStr(incomming) & vbCrLf
> > End Sub
> >
> > Det kan jo ikke blive mere simpelt. Men der er alligevel en fejl et
eller
> > andet sted.
> >
> > Hilsen
> > Anders
> >
> >
>
>



Anders Lybecker (26-05-2001)
Kommentar
Fra : Anders Lybecker


Dato : 26-05-01 08:39

> OutputStreamWriter(clientSocket.getOutputStream(),US-ASCII)
> Det skulle gøre at der skrives med ascii kodning

Tak.

> > BufferedReader in = new BufferedReader(
> > new InputStreamReader(clientSocket.getInputStream()));

Hvordan kan det være at InputStreamReader'en kun kan læse ASCII og ikke
Unicode?
Jeg prøvede at sende ren Unicode fra mit vb program, og det blev til
volapyk!

InputStreamReader & InputStreamWriter bruger Unicode og PrintWriter &
PrintReader bruger ASCII, er det korrekt?

Hilsen
Anders



Lars Rosenberg (26-05-2001)
Kommentar
Fra : Lars Rosenberg


Dato : 26-05-01 19:18

Naar du laver en InputStreamReader er der en default encoding setting sat.
"Every instance of the Java virtual machine has a default character
encoding. The default encoding is determined during virtual-machine
startup and typically depends upon the locale and encoding being used by
the
underlying operating system."
Du kan saette den til en af nedestaaende UTF typer.

Med hensyn til BufferedReader og PrintWriter bruger de ogsaa default
encoding med mindre du saetter InputStreamReader/InputStreamWriter til noget
andet.

Eksempel for PrintWriter:
"Otherwise, the string's characters are converted into bytes according
to the platform's default character encoding, and these bytes are
written in exactly the manner of the write(int) method."

Lars.


InputStreamReader
public InputStreamReader(InputStream in, String enc) throws
UnsupportedEncodingException

enc:
"US-ASCII" Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block
of the Unicode character set
"ISO-8859-1" ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1
"UTF-8" Eight-bit Unicode Transformation Format
"UTF-16BE" Sixteen-bit Unicode Transformation Format, big-endian byte order
"UTF-16LE" Sixteen-bit Unicode Transformation Format, little-endian byte
order
"UTF-16" Sixteen-bit Unicode Transformation Format, byte order specified by
a
mandatory initial byte-order mark (either order accepted on input,
big-endian used on output)

file:///C:/Development/java_docs/jdk1.3/docs/api/java/lang/package-summary.h
tml#charenc

"Anders Lybecker" <anders@lautrupklubben.dk> wrote in message
news:17JP6.487$Ta.291458245@news.mobilixnet.dk...
> > OutputStreamWriter(clientSocket.getOutputStream(),US-ASCII)
> > Det skulle gøre at der skrives med ascii kodning
>
> Tak.
>
> > > BufferedReader in = new BufferedReader(
> > > new InputStreamReader(clientSocket.getInputStream()));
>
> Hvordan kan det være at InputStreamReader'en kun kan læse ASCII og ikke
> Unicode?
> Jeg prøvede at sende ren Unicode fra mit vb program, og det blev til
> volapyk!
>
> InputStreamReader & InputStreamWriter bruger Unicode og PrintWriter &
> PrintReader bruger ASCII, er det korrekt?
>
> Hilsen
> Anders
>
>



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste