日期:2014-05-20  浏览次数:20719 次

java与C的socket通信
已经存在一个C语言编写的SOCKET服务,服务端(C)已经指定接收的是一个C的对象.客户端用JAVA去连接,客户端(JAVA)发送给服务端(C)的数据流服务端解析的出来吗?如果可以,客户端应该怎么组织这个数据流,如果不可以,应该怎么去实现,直接发送字符流吗?
表达能力不太好,有明白的人吗?

------解决方案--------------------
只能从客户端接收一个C语言定义好的对象
=======================
这句话搞不懂了,具我了解socket并不能传递对象, 我估计是服务器端接收到数据(字节流),然后分解,把数据放到一个自己定义好的对象而已. 你并不能从客户端直接发送一个对象给服务器.

我的理解是,客户端是什么语言并没关系,关键是你要知道服务器端的通信规则(就是说通信协议),你要在根据这个协议向服务器发送流数据就行了. socket通讯的协议完全可以自己定的,要看服务器端的文档或找相关的开发人员就会知道.
------解决方案--------------------
如果你不知道服务器的协议,向服务器乱发数据,服务器是认不出来的.
------解决方案--------------------
如果用C来传JAVA对象肯定很难,但用JAVA来传C的对象比较容易,因为C的一个对象很容易按类型大小来用代码给"拚"出来.
对于对象本身,函数在对象中没有任何信息,也就是对象本身不包括函数的信息,其实都是定义的成员按类型大小排列的.
------解决方案--------------------
你传的对象是流对象(stream),当然是可以了,对方收到的不是对象,是一个"流"。 这个流可以转换成字节数组或字符串等.
------解决方案--------------------
如果能知道JAVA中的对象流化方式,用C来解析一个JAVA对象也是可能的,不过现在确实不知道JAVA对象流化后会是什么样的字节流,可以测试,一个一个去打出来看,不过不同的对象怕是不一样吧、、、真的没有去试过
------解决方案--------------------
java 和 c 用socket通讯没有任何问题,两边都是采用字节流进行通讯,主要的就是你定义一个两边都可以识别的包的格式即可。
------解决方案--------------------
可以用xml进行数据交互

用web service 解决跨平台问题
------解决方案--------------------
这个不是服务器短的通信协议代码,而是你要最终转换的对象,你要从socket接收数据的地方查看,那块应该有怎们读取你发送的数据流的。如前八位为m_nType,在后面的8位为m_nLen,然后8位是m_nBlock,在后面是8位是m_pData长度,最后才是m_pData数据...

另外你最好找到服务器端的通信协议看看,看看发送报文结构是什么,还有接收报文的格式,这个一般都会有的。

探讨
引用:
如果服务器和客户端都是你自己写的,这个通信协议就有你自己拟定的,如果服务器是有别人写的,你就需要看看它的协议是什么样的,没有服务器短的协议你很难开发客户端的。

一般的报文都会有一个报头段和数据段,报头段会定义这个报的结构(或者报的类型)是什么有多长等等,数据段就是你实际要传递的信息。如报头前三位表示类型,后面五位表示长度...


服务端是已经封装好的,通信协议就是上…

------解决方案--------------------
是32位!

LZ的问题我也不知道!


我是来学习的!!!
------解决方案--------------------
了解c对象的结构,自己写c把它转成xml,再用java解析
------解决方案--------------------
通信都是通过传输最底层的字节流来完成的
就可以发送的时候根据听信协议包装要发送的数据
而在接收端将接收到的字节流再按协议解析就可以了
可以单独定义一个协议包装和解析单元