Java中的C#和ObjectInputStream通过Socket实现!

时间:2010-01-18 09:03:25

标签: sockets

我认为套接字服务器是用Java编写的,客户端是用C#编写的。

如果我在套接字服务器中使用InputStream,我可以从客户端获取请求。我的代码如下:

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

但是如果我在套接字服务器中使用ObjectInputStream,我就无法收到来自客户端的任何请求。
例外是:“ java.io.StreamCorruptedException:无效的流标题
我的代码如下:

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

所以,我的问题是:C#客户端可以通过套接字在Java中使用ObjectInputStream吗?

任何帮助都会受到赞赏。
非常感谢,丹。

2 个答案:

答案 0 :(得分:3)

ObjectInputStream需要一个包含java对象的序列化表示的数据流...理论上c#可以用java的序列化格式对它的对象进行编码,但它不会很漂亮。

答案 1 :(得分:1)

jspcal是对的:也许使用这些类?

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

Java Server

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