2012-07-12 41 views
3

这甚至可能吗?我有一个mac服务器程序,我需要用它来回传给windows程序。我有客户端在Java中的工作,但我似乎无法弄清楚如何让它在VB.net工作...带有VB.NET客户端的Java套接字服务器?

这里是Java代码...

import java.io.*; 
import java.net.InetAddress; 
import java.net.Socket; 

public class socketClient { 

public static void main(String[] args) { 
    /** 
    * Define a host server 
    */ 
    String host = "10.1.1.194"; 
    /** 
    * Define a port 
    */ 
    int port = 19999; 

    StringBuffer instr = new StringBuffer(); 
    String TimeStamp; 
    System.out.println("SocketClient initialized"); 

    try { 

     //Obtain an address object of the server 
     InetAddress address = InetAddress.getByName(host); 


     //Establish a socket connection 
     Socket connection = new Socket(address, port); 

     //Instantiate a BufferedOutputStream object 
     BufferedOutputStream bos = new BufferedOutputStream(connection.getOutputStream()); 

     /** 
     * Instantiate an OutputStreamWriter object with the optional 
     * character encoding. 
     */ 
     OutputStreamWriter osw = new OutputStreamWriter(bos, "US-ASCII"); 

     TimeStamp = new java.util.Date().toString(); 
     String process = "Initiate file transfer on " + host + " port " + port 
       + " at " + TimeStamp + (char) 13; 

     //Write across the socket connection and flush the buffer 
     osw.write(process); 
     osw.flush(); 


     /** 
     * Instantiate a BufferedInputStream object for reading /** 
     * Instantiate a BufferedInputStream object for reading incoming 
     * socket streams. 
     */ 
     BufferedInputStream bis = new BufferedInputStream(connection.getInputStream()); 
     /** 
     * Instantiate an InputStreamReader with the optional character 
     * encoding. 
     */ 
     InputStreamReader isr = new InputStreamReader(bis, "US-ASCII"); 


     //Read the socket's InputStream and append to a StringBuffer 
     int c; 
     while ((c = isr.read()) != 13) { 
      instr.append((char) c); 
     } 

     //Close the socket connection. 
     connection.close(); 
     System.out.println(instr); 
    } 
    catch (IOException f) 
    { 
     System.out.println("IOException: " + f); 
    } 
    catch (Exception g) 
    { 
     System.out.println("Exception: " + g); 
    } 
} 
} 

而且这里是我的VB.NET代码,我有那么远,

Private clientSocket As Socket 
Private host As String = "10.1.1.194" 
Private port As Integer = 19999 

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

    Try 


     Dim add As New IPEndPoint(IPAddress.Parse(host), port) 

     clientSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) 

     clientSocket.Connect(add) 

     Dim netStream As New NetworkStream(clientSocket, True) 



     Dim outstream As Byte() = System.Text.Encoding.ASCII.GetBytes("Initiate file transfer from " _ 
     & System.Environment.MachineName & " on " & host & " port " & port & " at " & TimeOfDay) 


     netStream.Write(outstream, 0, outstream.Length) 
     netStream.Flush() 

    Catch ex As Exception 
     Debug.Write(ex.Message) 
    End Try 


    End Sub 

现在,如果我运行VB代码,它挂起...并没有出现在我的MAC控制台(像它的时候然而,当我关闭VB代码时,我得到了java.net.SocketException:Connection reset错误,所以我必须非常接近地计算出t他出去了。

事情是,当谈到套接字编程时,我几乎什么都不知道,所以如果有人能把我推向正确的方向,那将非常感激!

回答

2

这甚至可能吗?

是的。

我没有看到你在你的VB.NET例子中的任何地方写了Carriage Return(13)字符,但你希望它出现在Java端,以便将某些东西打印到控制台。

+0

哇,我很笨。甚至没有看到。完美工作,谢谢! – Calvin 2012-07-13 14:25:02

相关问题