2012-12-29 124 views
1

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

我是否错过了一些东西?

这里是我的代码

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

'异常在线程 “主” java.net.SocketException异常:连接复位 \t在java.net.SocketInputStream.read(未知来源) \t在java.net.SocketInputStream.read(未知来源) \t在sun.nio.cs.StreamDecoder.readBytes(未知来源) \t在sun.nio.cs.StreamDecoder.implRead(未知来源) \t在sun.nio.cs.StreamDecoder.read(未知来源) \t在java.io.InputStreamReader.read(未知源) \t at java.io.BufferedReader.fill(Unknown Source) \t在java.io.BufferedReader.readLine(来源不明) \t在java.io.BufferedReader.readLine(来源不明) \t在frmClient.run(frmClient.java:18) ' – ThunderRoid

回答

1

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

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

在您的服务器


题外话:我会看看线程服务器在这里,因为它阻止应用程序,同时侦听连接。下面是一个example

+0

非常感谢@Reimeus,它的工作原理,我很愚蠢,我应该找出它 – ThunderRoid

+0

再次有一个小问题,可以帮助 - http://stackoverflow.com/questions/14107006/vbnet -server-Android的客户端套接字发送 - 接收 – ThunderRoid

1

好吧,我不知道问题是什么在这里,但我建议拆分将字符串转换为字符,然后将数组的长度写入输出流。一种用于在Java循环然后可以单独地从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流不是写线被简单地写的字符。尝试追加一个breakline字符到最后“了解它\ n”

+0

感谢4乌拉圭回合的帮助 但我仍然得到这个错误在线程 '例外 “主” java.io.EOFException的 \t在java.io.DataInputStream.readInt(来源不明) \t在frmClient.run(frmClient.java:19) \t在frmClient 。主要(frmClient。java:8)' – ThunderRoid

+0

那可能是因为你实际上没有在vbs中写入int? (facepalm) – Aaron

相关问题