java与c/c++进行socket通信的一些问题
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                java与c/c++进行socket通信的一些问题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                c/c++和java通信的問題比較多,特別是c特有的數(shù)據(jù)結(jié)構(gòu)(如struct)。
特地根據(jù)網(wǎng)友的一個問題舉個例子,希望對初學(xué)者有所幫助。
這類問題通常是為了利用原有Server或者Server不能做修改(通常是c/c++)造成。
比如Server端只接收一個結(jié)構(gòu)Employee,定義如下:
struct UserInfo {char UserName[20];int UserId; }; struct Employee {UserInfo user;float salary; };?
當(dāng)然也可以定義為
struct Employee {char name[20];int id;float salary; };?
java client 測試源碼(為說明問題,假設(shè)struct字節(jié)對齊,sizeof(Employee)=28)
import java.net.*;/*** 與C語言通信(java做Client,c/c++做Server,傳送一個結(jié)構(gòu))* @author kingfish* @version 1.0*/ class Employee {private byte[] buf = new byte[28]; //為說明問題,定死大小,事件中可以靈活處理/*** 將int轉(zhuǎn)為低字節(jié)在前,高字節(jié)在后的byte數(shù)組*/private static byte[] toLH(int n) {byte[] b = new byte[4];b[0] = (byte) (n & 0xff);b[1] = (byte) (n >> 8 & 0xff);b[2] = (byte) (n >> 16 & 0xff);b[3] = (byte) (n >> 24 & 0xff);return b;}/*** 將float轉(zhuǎn)為低字節(jié)在前,高字節(jié)在后的byte數(shù)組*/private static byte[] toLH(float f) {return toLH(Float.floatToRawIntBits(f));}/*** 構(gòu)造并轉(zhuǎn)換*/public Employee(String name, int id, float salary) {byte[] temp = name.getBytes();System.arraycopy(temp, 0, buf, 0, temp.length);temp = toLH(id);System.arraycopy(temp, 0, buf, 20, temp.length);temp = toLH(salary);System.arraycopy(temp, 0, buf, 24, temp.length);}/*** 返回要發(fā)送的數(shù)組*/public byte[] getBuf() {return buf;}/*** 發(fā)送測試*/public static void main(String[] args) {try {Socket sock = new Socket("127.0.0.1", 8888);sock.getOutputStream().write(new Employee("kingfish", 123456789, 8888.99f).getBuf());sock.close();}catch (Exception e) {e.printStackTrace();}} //end?
總結(jié)
以上是生活随笔為你收集整理的java与c/c++进行socket通信的一些问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Java串口包Javax.comm的安装
- 下一篇: C与java通讯小结
