2010-01-18 58 views
1

我有一個套接字服務器是用Java編寫的,客戶端是用C#編寫的。通過Socket的Java中的C#和ObjectInputStream!

如果我在套接字服務器中使用InputStream,我可以從客戶端獲取請求。我的代碼如下:

InputStream myIN = sock.getInputStream();
byte [] b =新字節[10];
int revByte = myIN.read(b);

但是,如果我在套接字服務器中使用ObjectInputStream,我無法接收來自客戶端的任何請求。
例外情況是: 「java.io.StreamCorruptedException:無效流頭
我的代碼如下:

=新的ObjectInputStream(sock.getInputStream());
Object value = in.readObject();

所以,我的問題是:C#客戶端可以通過套接字在Java中使用ObjectInputStream嗎?

任何幫助將不勝感激。
非常感謝,
Dan

回答

3

ObjectInputStream需要一個包含java對象的序列化表示的數據流......理論上c#可以用java的序列化格式對它的對象進行編碼,但它不會很漂亮。

+0

感謝jspcal。你有一個樣本來編碼Java序列化中的C#對象嗎?或關於它的任何鏈接。請告訴我 :) – DanCH 2010-01-18 09:31:16

1

jspcal是正確的:也許與這些類?

http://mediakey.dk/~cc/java-and-c-client-server-socket-programming/

Java服務器

try 
{ 
    ServerSocket ss = new ServerSocket(1800); 
    Socket s = ss.accept(); 
    System.out.println("Client Accepted"); 
    BufferedReader br = new BufferedReader(new 
    InputStreamReader(s.getInputStream())); 
    System.out.println(br.readLine()); 
    PrintWriter wr = new PrintWriter(new OutputStreamWriter(s.getOutputStream()),true); 
    wr.println("Welcome to Socket Programming"); 
} 
catch(Exception e){ System.out.println(e); } 

C#客戶:

try 
{ 
    TcpClient tc = new TcpClient("server",1800);// in the place of server, enter your java server's hostname or Ip 
    Console.WriteLine("Server invoked"); 
    NetworkStream ns = tc.GetStream(); 
    StreamWriter sw = new StreamWriter(ns); 
    sw.WriteLine("My name is Pramod.A"); 
    sw.Flush(); 
    StreamReader sr = new StreamReader(ns); 
    Console.WriteLine(sr.ReadLine()); 
} 
catch(Exception e){ Console.WriteLine(e); }