[VBNET] Socket communicatie met Java

Pagina: 1
Acties:

  • creenmachine
  • Registratie: Januari 2006
  • Laatst online: 03-01-2023
Hoi,

Voor een projectje wil ik een Java applicatie met een VB.NET applicatie laten babbelen via een socket... Op zich werkt dit, maar het werkt helaas maar een keer... De bedoeling is dat de VB applicatie een socketserver is die even met een client praat, en als dit klaar is weer wacht op een volgende verbinding...

Met de huidige code werkt alles prima als de java applicatie wordt opgestart. Maar als deze applicatie klaar is en ik hem dan vervolgens weer op wil starten krijg ik vanuit de java kant een "IOException: java.net.SocketException: Connection reset" melding... Er is van de data (text) die van de client naar de server gestuurd wordt EEN karakter verzonden.....

-Na nog wat meer onderzoek:-
Na de eerste run lijkt de VB applicatie nog maar EEN karakter te willen ontvangen...
Als ik vanuit de client dus maar EEN karakter verstuur gaat het wel goed...
Suggesties? (Nee, een karakter tegelijk versturen is geen optie ;) )

De VB.Net code zien er als volgt uit:

*******************************************
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Imports System.Net.Sockets
Imports System.Text
Imports System.Net

Class TCPSrv
Shared Sub Main()
' Must listen on correct port- must be same as port client wants to connect on.
Const portNumber As Integer = 8000

Dim teller As Integer
teller = 0

Do Until teller = 5
Dim server_ip_address As IPAddress
server_ip_address = IPAddress.Parse("10.1.1.6")
Dim tcpListener As New TcpListener(server_ip_address, portNumber)
tcpListener.Start()
Console.WriteLine("Waiting for connection...")
Try
'Accept the pending client connection and return a TcpClient initialized for communication. 
Dim tcpClient As TcpClient = tcpListener.AcceptTcpClient()
Console.WriteLine("Connection accepted.")
' Get the stream
Dim networkStream As NetworkStream = tcpClient.GetStream()
' Read the stream into a byte array
Dim bytes(tcpClient.ReceiveBufferSize) As Byte
networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
' Return the data received from the client to the console.
Dim clientdata As String = Encoding.ASCII.GetString(bytes)
Console.WriteLine(("Client sent: " + clientdata))
Dim responseString As String = "Connected to server."
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(responseString)
networkStream.Write(sendBytes, 0, sendBytes.Length)
Console.WriteLine(("Message Sent /> : " + responseString))
'Any communication with the remote client using the TcpClient can go here.
'Close TcpListener and TcpClient.
tcpClient.Close()
tcpListener.Stop()
Console.WriteLine("klaar")
Console.WriteLine(teller)
teller = teller + 1
Catch e As Exception
Console.WriteLine(e.ToString())
Console.ReadLine()
End Try
Loop
End Sub
End Class


*******************************************

Ik ben zelf niet zo heel erg thuis in VB en ik heb dit stukje code dus op internet gevonden... Het was oorspronkelijk bedoeld op 1x te lopen en dan te stoppen. Ik heb er echter een loopje in gestopt zodat hij weer op een nieuwe verbinding zou wachten...

Kan iemand mij vertellen wat hier mis gaat??


thanx...


Voor de volledigheid volgt hier ook nog de Java method:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public String sendSocketMessage(String address, int port, String data){
// declaration section:
Socket smtpSocket = null; 
DataOutputStream os = null;
DataInputStream is = null;

// Initialization section:
try {
smtpSocket = new Socket(address, port);
os = new DataOutputStream(smtpSocket.getOutputStream());
is = new DataInputStream(smtpSocket.getInputStream());
} catch (UnknownHostException e) {
System.err.println("Don't know about host: "+address);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to: "+address+" (Is the other socket-side running?)");
}

// If everything has been initialized then we want to write some data
// to the socket we have opened

if (smtpSocket != null && os != null && is != null) {
try {

os.writeBytes(data+"\n");

String responseLine;
while ((responseLine = is.readLine()) != null) {
System.out.println("Server: " + responseLine);
if (responseLine.indexOf("Ok") != -1) {
System.out.println("Received Ok...");
break;
}
}

// clean up:
os.close();
is.close();
smtpSocket.close(); 
} catch (UnknownHostException e) {
System.err.println("Trying to connect to unknown host: " + e);
} catch (IOException e) {
System.err.println("IOException: " + e);
}
} 

return "ok";
}

[ Voor 5% gewijzigd door creenmachine op 19-07-2006 10:58 ]


  • creenmachine
  • Registratie: Januari 2006
  • Laatst online: 03-01-2023
niemand? :'(

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Kunnen vb.Net regels 14 t/m 16 niet beter vlak voor de loop gedaan worden, dat hoeft maar 1x te gebeuren toch?

offtopic:
code zonder indenting leest niet lekker. ;)

{signature}


  • creenmachine
  • Registratie: Januari 2006
  • Laatst online: 03-01-2023
Klopt, heb ik ondertussen ook veranderd... maar helaas lost dit het probleem niet op...
Na de eerste keer stop de server nog steeds met ontvangen na 1 karakter...

Toch bedankt! ;)

  • DemonTPx
  • Registratie: December 2002
  • Laatst online: 05-12-2025
Dit moet boven de Do:
Visual Basic:
1
2
3
4
5
6
Dim server_ip_address As IPAddress
server_ip_address = IPAddress.Parse("10.1.1.6")

Dim tcpListener As New TcpListener(server_ip_address, portNumber)
tcpListener.Start()
Console.WriteLine("Waiting for connection...")


En dit moet onder de Loop:
Visual Basic:
1
2
tcpClient.Close()
tcpListener.Stop()

  • creenmachine
  • Registratie: Januari 2006
  • Laatst online: 03-01-2023
Ook dit heeft geen effect...

Ik heb ook al eens geprobeerd om regel 26 en 27 te vervangen door:

Dim bytes(25) As Byte
networkStream.Read(bytes, 0, 25)

maar dat helpt ook niet... iedere keer wordt er maar 1 karakter verzonden (behalve de eerste run):

Waiting for connection...
Connection accepted.
Client sent: Stukje bla
Message Sent /> : Connected to server.
klaar
0

Connection accepted.
Client sent: S
**** Hier krijg ik bij de java kant dus: IOException: java.net.SocketException: Connection reset ****
Message Sent /> : Connected to server.
klaar
1
Pagina: 1