【问题标题】:VB.Net Server & Java Client (Socket) Send & Receive TextVB.Net 服务器和 Java 客户端(套接字)发送和接收文本
【发布时间】:2012-12-14 15:09:56
【问题描述】:

我是 Java 编程新手 我写了一个简单的服务器(VB.NET)/客户端(Java)程序。 来自 Java 的文本已成功发送到 VB.Net,但在 Java 中未收到来自 VB.Net 的响应

我错过了什么吗?

这是我的代码

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);
}
}

【问题讨论】:

  • Exception in thread "main" java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at java.net.SocketInputStream.read(Unknown Source) at sun.nio.cs.StreamDecoder.readBytes(Unknown Source) at sun.nio.cs.StreamDecoder.implRead(Unknown Source) at sun.nio.cs.StreamDecoder.read(Unknown Source) at java.io.InputStreamReader.read(Unknown Source) at java.io.BufferedReader.fill(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) at frmClient.run(frmClient.java:18)

标签: java vb.net sockets tcp client


【解决方案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”

【讨论】:

  • 感谢 4 的帮助,但我仍然收到此错误 Exception in thread "main" java.io.EOFException at java.io.DataInputStream.readInt(Unknown Source) at frmClient.run(frmClient.java:19) at frmClient.main(frmClient.java:8)
  • 这可能是因为您实际上并没有在vbs中编写int? (捂脸)
【解决方案2】:

您的Java 客户端看起来不错。您只需要确保发送换行符以匹配 BufferedReader.readLine 语句。替换:

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

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

在您的服务器中。


旁白:我会在这里查看threading 服务器,因为它在侦听连接时阻塞了应用程序。这是example

【讨论】:

猜你喜欢
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
相关资源
最近更新 更多