java與c通信
『壹』 java伺服器和C的客戶端進行通信,伺服器要接受從客戶端發來的一個結構體,如何接收
你打算通過哪種方式進行通信?
如果你打算通過網路通信那麼java建立一個伺服器端套接字監聽一個埠,c語言寫的程序向這個伺服器埠發生數據即可
如果你打算通過管道通信,那麼c語言寫的程序向管道中寫入數據,java寫的程序從管道中讀取數據即可
『貳』 java與c進行socket通訊byte問題
byte 由於在C java中都是有符號(-128到127)
所以你傳大於127的數字就出現溢出
C語言解決 : 定義unsigned 無符號
Java解決 : 使用short
『叄』 linux用java socket與c的socket通信亂碼問題
應該就是字元集問題。
首先要確定Linux返回的數據中,採用了那種編碼方式,如:GBK。
對應的,在Java一端,將字元串信息轉換成byte數組並寫入Socket,讀出的數據也轉換成字元串,
如:
String s = "中文" ;
sockoutputstream.write (s.getBytes ("GBK")) ;
讀出來時候,
byte [] buf = sockinputStream.read ()
String s = new String (buf, "GBK") ;
這樣就可以了。
『肆』 誰有java和C用socket通信的簡單例子
這是用Java寫的伺服器的程序
importjava.net.*;
importjava.io.*;
publicclassServer{
privateServerSocketserver;
privateSocketclient;
publicServer(){
booleanflag=true;
try{
server=newServerSocket(8888);//埠
System.out.println("伺服器正在等到客戶端連接......");
while(flag){
client=server.accept();//阻塞
newServerThread(client).start();
}
server.close();
}catch(Exceptione){
}
}
publicstaticvoidmain(String[]args){
newServer();
}
{
privateSocketclientThread;
privatePrintStreamout;
privateBufferedReaderin;
privatebooleanflag=true;
publicServerThread(Socketclient){
this.clientThread=client;
System.out.println("主機與客戶端成功建立連接,開始通訊!!");
}
publicvoidrun(){
try{
/*
*超時判斷:設置超時時間300秒,中斷連接或者300秒內客戶端無回應信息則認為中斷
*缺點便是必須把超時時間設置很長,否則客戶端待機也認為超時處理,無法判斷是否埠
*/
clientThread.setSoTimeout(300000);
out=newPrintStream(client.getOutputStream());
in=newBufferedReader(newInputStreamReader(client.getInputStream()));
while(flag){
Stringstr=in.readLine();//阻塞
System.out.println("客戶端:"+str);
out.println("主機成功接收到您的信息!!");
}
client.close();
}catch(Exceptione){
//如果異常是連接異常,則輸出連接斷開
if(e.getMessage()=="Connectionreset"){
System.out.println("客戶端已斷開連接!!");
}
}
}
}
}
這是客戶端的
importjava.net.*;
importjava.io.*;
publicclassClient{
privateSocketclient;
publicClient(){
InetAddressip;
try{
System.out.println("正在連接伺服器......");
ip=InetAddress.getLocalHost();
Stringlocalip=ip.getHostAddress();
client=newSocket(localip,8888);//阻塞
BufferedReaderinput=newBufferedReader(newInputStreamReader(System.in));
BufferedReaderin=newBufferedReader(newInputStreamReader(client.getInputStream()));
PrintStreamout=newPrintStream(client.getOutputStream());;
booleanflag=true;
System.out.println("成功連接到主機,開始通訊!!");
while(flag){
System.out.printf("請輸入信息:");
out.println(input.readLine());//阻塞
//判斷是否與主機斷開
if(isConnected()){
System.out.println("發生成功!!");
System.out.println("主機:"+in.readLine());
}else{
System.out.println("發生失敗!!");
System.out.println("與伺服器斷開連接!!");
client.close();
break;
}
}
}catch(Exceptione){
System.out.println(e.getMessage());
}
}
//判斷伺服器是否斷開的方法,
//通過OutputStream發送一段測試數據,如果發送失敗就表示遠端已經斷開連接
//但會與正常的傳送干擾,所以用sendUrgenData
publicbooleanisConnected(){
try{
client.sendUrgentData(0xFF);
returntrue;
}catch(Exceptione){
e.printStackTrace();
returnfalse;
}
}
publicstaticvoidmain(String[]args){
newClient();
}
}
『伍』 Java如何與C進行通信
兩個不同進程之間的數據交互:
1、可以選擇socket通信
2、可以選擇文件,不過要注意好讀寫
3、消息傳遞,在windows下拋出一個消息//具體怎麼做我沒試過,只知道有這方法
4、資料庫//這個比較容易實現
上面說的兩個不同進程,當然就是可以選擇用不同語言寫出來的程序了
『陸』 JAVA和c++是怎麼進行通訊的
1. Java Native Interface(JNI)
中文為JAVA本地調用, 從Java1.1開始,Java Native Interface(JNI)標准成為java平台的一部分,它允許Java代碼和其他語言寫的代碼進行交互。JNI一開始是為了本地已編譯語言,尤其是C和C++而設計的,但是它並不妨礙你使用其他語言,只要調用約定受支持就可以了。
2. Socket通信
3. Web service
