2010-01-18 56 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); }