我现在在做一个诊断程序(Java编写,运行在经裁剪的嵌入式linux),现需要调用一个检测程序(c编写,运行在经裁剪的嵌入式linux),该检测程序返回一个检测字符串.现在有三种技术,有几个问题要大家帮忙:1.采用socket,检测程序做为服务器,我的诊断程序做为客户端.我向服务器发出请求,要求它传回检测字条符串
 问题:用c在linux上编写的服务器端socket程序,和java编写的客户端socket程序能否直接通信,它们之间传递的数据类型是怎样的,c应该是字符,而java是输入流.我感觉它们的格式不一致.2.采用java.lang.Runtime类的exec(),可以调用一个应用程序,但是exec()返回一个Procesor类型的对象,该类是一个抽象类,其中有一个抽象方法,getInputStream(),所以这种方式也不能返回字符串.各位谁用过,指导一下.3.采用JNI,这种方法我感觉比较麻烦,原来的c程序要有一些小改动.而且我改完的c通不过编译,用过的两个头文件jni.h,类.h(由javah生成),都加了,也不行.是否还有别的方法,能让c和java在进程间调用和通信?请各位帮我看看哪种方法好,我想用socket,如果能用比较简单, 不过是本地调用, 感觉不应该用.还有JNI,有经验的朋友帮帮我.

解决方案 »

  1.   

    windows的winsock和linux 的socket是否也可以通信,关注
      

  2.   

    2.采用java.lang.Runtime类的exec(),可以调用一个应用程序,但是exec()返回一个Procesor类型的对象,该类是一个抽象类,其中有一个抽象方法,getInputStream(),所以这种方式也不能返回字符串.各位谁用过,指导一下
    ???你确认他是抽象方法吗?
    还是看一下网上流传的java获得mac地址的代码吧。直接调用Process类
      

  3.   

    prajna_gf() :
    windows的winsock和linux 的socket怎么不可以通讯,如果不能通讯,TCP/IP协议不就是一纸空文了
      

  4.   


     问题:用c在linux上编写的服务器端socket程序,和java编写的客户端socket程序能否直接通信,它们之间传递的数据类型是怎样的,c应该是字符,而java是输入流.我感觉它们的格式不一致可以,socket是一个规范,虽然我一行都没有写过是否还有别的方法,能让c和java在进程间调用和通信?进程通讯,(不是线程) 可以用文件,socket. 其他的不知道  -------我依旧是一个代码都没有写
      

  5.   

    cao_zp(方世玉):getInputStream(),确实是抽象方法,Procesor类的所有方法都是抽象方法,我看的源码.我看过有的书中用这个方法取返回值,我测试过,得到的结果只能是null.
      

  6.   

    linux下的socket是传递的参数是一个指向字符数组的指针.第个字符都是1字节.
    java中的每个字符是2个字节,请问一下,我读字符时是否是应使用序列化接口,还是用byteinputstream 就行了?
      

  7.   

    tanghuan() :
    tcp/ip只保证传输层以下,在应用层,一种类型的数据经过tcp/ip传输后,到另一应用层,还是这个类型,其他语言能否解释这个类型?JNI是数据类型的转换,如,将c的int转换为jint,才能完成c和java 的参数传递我的看法,大家看看有什么意见?我懂的不多,有经验的朋友帮看看?
      

  8.   

    1.  你概念整错了,其实它们传输都是属于:字节流   当然这两种语言同样也能控件传输Unicode(字符流),而它们传输当然也是一致的,都使用socket1.1 || socket2.02.  理论上是可以实现的,查查资料,但是很复杂,需要建立父子关系或使用C++的匿名管道,不如用SOCKET 方便3.  你拉倒吧,麻不麻烦,小软件,还不如用C重开发呢最好的方法当然还是使用Sock协议 网络通讯
    C语言就算不支持Unicode,  但C语言不是有wchat_t 型嘛这个就是字符的类型呀
    就算没有你也可以自已定义一个新类型呀 typdef wchat char[2]