[VB.NET] Socket communicatie met Java

Pagina: 1
Acties:
  • 63 views sinds 30-01-2008

  • 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..... |:(

De VB.Net code zien er als volgt uit:

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

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:

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 33% gewijzigd door creenmachine op 19-07-2006 10:26 ]


  • creenmachine
  • Registratie: Januari 2006
  • Laatst online: 03-01-2023
Na nog wat meer onderzoek:

Het lijkt erop dat na de eerste run de VB kant maar EEN karakter wil ontvangen...
Als ik er dus maar EEN stuur gaat het wel goed...

suggesties? (nee het is geen optie om alle data karakter voor karakter te versturen ;) )

thanx

  • creenmachine
  • Registratie: Januari 2006
  • Laatst online: 03-01-2023
Shit, ik had in 'Programming' willen posten... sorry...

  • Invisible_man
  • Registratie: Juni 2006
  • Laatst online: 15:24
Voor de leesbaarheid van je code is het makelijk dat je deze tussen code tags zet [/code] en [code] (maar dan andersom, de gene die ik het eerst noemde na je code en visa versa).

Verder is het ook overzichtelijk om je code in wat functies op te delen, zoals een "SendData" functie.

[ Voor 19% gewijzigd door Invisible_man op 19-07-2006 10:51 ]


  • André
  • Registratie: Maart 2002
  • Nu online

André

Analytics dude

creenmachine schreef op woensdag 19 juli 2006 @ 10:47:
Shit, ik had in 'Programming' willen posten... sorry...
Open dan niet een nieuw topic maar laat deze verplaatsen :/

Dit topic is gesloten.