我认为套接字服务器是用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吗?
任何帮助都会受到赞赏。
非常感谢,丹。
答案 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); }