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
