javasocket与c
❶ java的socket怎么与c/c++通讯(求一个简单Demo)
亲,socket不是都一样嘛 ,如果java做客户端,用socket直接connet到c++的服务器ip与端口就ok,如果java做服务器,c++做客户端,c++的大概过程如下
创建套接字,设置连接的ip与端口,调用connect,然后read/send数据,closesocket
❷ Java与C#进行Socket通信
public static void Send(String content) throws IOException {
Socket s = new Socket(ip,port);
DataOutputStream out = new DataOutputStream(s.getOutputStream());
String temp = content;
int length = temp.getBytes().length;
byte[] b = temp.getBytes();
out.writeInt(length);
out.write(b);
out.flush();
}
可以用上面的方法来发送到指定的端口,然后C#用只要监听端口就可以了,先接收一个int的报文长度,然后new出一个byte[]然后再接收一个byte[],然后通过这个byte[]转换成String就可以了
❸ java与c++socket通信问题,
用byte数组发送和接收数据,char*的不行
❹ linux(或c语言)和JAVA下的socket编程有什么异同点
不同:
1.首先2者提供的接口不同,这点很容易区分。
2.java跨平台,写好的程序不用做任何修改就可以放到linux或者windows或者苹果等诸多操作系统上运行,C当然可以,但linux本身提供了socket的
系统调用
,你如果使用的是linux系统调用,那么你的程序只能在linux下运行,这点不难理解。但如果是C的
库函数
,那还是可以跨平台的
3.利用linux系统调用的速度是要快于JAVA提供的SOCKET接口。
相同性我就不说了,你看完我下面的话,你就能理解他们直接的关系了。
从你提出的问题,我觉的你可能对编程不是很了解。
socket是用来实现
进程通信
(主要是网络通信)的目的,但这不是语言能够解决的问题,确切的说语言连什么是进程他都不知道。这么说来SOCKET不是JAVA带的功能,那么JAVA是如何来实现这一功能的呢?JAVA是通过调用系统提供的SOCKET来完成的。
在LINUX里面,JAVA中的SCOKET最终就是通过调用系统提供的系统调用来完成,而系统调用的SOCKET则是操作系统和硬件共同完成的。所以他们共同点是,如果你的
JAVA程序
是在LINUX中运行的,那他们通信的具体过程会完全一样,只不过JAVA会在系统调用前面加上一些它认为必需加的东西或者是它认为能够方便编程人员使用的东西。
❺ JAVA Socket编程和C++Socket编程有什么不同
Socket 是winsock里的原始套接字开发接口API,c++/java 他们是开发语言,而 socket 是一种通讯标准简称。首先,2者提供的接口不同(主要是封装形式不同),java 本身不带socket通讯底层实现的,而是通过调用系统底层的winsock API 进行的二次封装,而c/c++ 的socket可以理解为 更接近 系统层面的winsock,所以c/c++ 的socket 可以提供 更多的底层扩展与控制。 其次,从语言上讲,用JAVA发开出来的socket程序 可以在任何支持JAVA虚拟机上运行,不用修改任何代码。而 C/c++ 要根据系统特性进行适当的修改。
❻ 请教一下用JAVA和用C实现socket网络通信哪个效率更高高分求,在线等。
肯定是c的效率高,但是假如不是在特别苛刻的要求socket效率的地方区别并不明显,也就是说在大部分应用情况下并没有特别大的差异。java反而更容易些。
❼ c语言和java 使用socket通信的时候 数据大小端转换的问题
大小端转换就是移位,拼接,用C实现很简单。
至于解析出问题,可以约定双方以字节流进行通信,比如,约定一个浮点数拆成文本,或者一个32位长整拆成四个字节,先传送低字节(或高字节),约定好以后,两边都照做就可以了。
❽ 谁有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();
}
}
❾ 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通讯byte问题
byte 由于在C java中都是有符号(-128到127)
所以你传大于127的数字就出现溢出
C语言解决 : 定义unsigned 无符号
Java解决 : 使用short