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