1

私はJavaプログラミングが初めてで、単純なサーバー(VB.NET)/クライアント(Java)プログラムを作成しました。Java からのテキストは VB.Net に正常に送信されますが、VB.Net からの応答は Java で受信されません。

何か不足していますか?

これが私のコードです

VB.NET (サーバー)

Imports System.Net.Sockets, System.Text
Public Class Form1

Dim server As New TcpListener(9999)
Dim client As New TcpClient
Dim stream As NetworkStream

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Me.Text = "Waiting...."
    server.Start()
    client = server.AcceptTcpClient
    'Receive msg'
    stream = client.GetStream()
    Dim r_byt(client.ReceiveBufferSize) As Byte
    stream.Read(r_byt, 0, client.ReceiveBufferSize)
    Dim str As String = Encoding.ASCII.GetString(r_byt)
    Label1.Text = str
    'Send msg'
    Dim s_byt() As Byte = Encoding.UTF8.GetBytes("got it")
    stream.Write(s_byt, 0, s_byt.Length)
    stream.Close()
End Sub

End Class

Java(クライアント)

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

public class frmClient {

public static void main(String[] args) throws Exception{
    frmClient myCli = new frmClient();
    myCli.run();

}

public void run() throws Exception{
    Socket socket = new Socket("192.168.0.100", 9999);
    PrintStream stream = new PrintStream(socket.getOutputStream());
    stream.println("Hello Server...");

    BufferedReader buffer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    String string = buffer.readLine();
    System.out.println(string);
}
}
4

2 に答える 2

1

あなたのJavaクライアントは元気そうです。BufferedReader.readLineステートメントに一致する改行を送信していることを確認する必要があります。交換:

Dim s_byt() As Byte = Encoding.UTF8.GetBytes("got it")

Dim s_byt() As Byte = Encoding.UTF8.GetBytes("got it" + vbCr)

サーバーで。


余談ですが、接続をリッスンしている間、サーバーがアプリをブロックするので、ここでサーバーをスレッド化する方法を見てみましょう。これが例です

于 2012-12-30T04:03:45.980 に答える
1

ここで何が問題なのかはわかりませんが、文字列を文字に分割してから、配列の長さを出力ストリームに書き込むことをお勧めします。Java の for ループは、DataInputStream から個別に文字を読み取り、それをアセンブルして文字列を形成できます。

DataInputStream dis = new DataInputStream(socket.getInputStream());
String chars = "";
for (int i = 0; i < dis.readInt(); i ++) {
    chars += dis.readChar();
}
System.out.println(chars);

また、vbs ストリームは行を書き込んでおらず、単に文字を書き込んでいます。最後にブレークライン文字を追加してみてください「わかりました\n」

于 2012-12-29T19:46:30.030 に答える