當前位置:首頁 » 編程語言 » cjavasocket

cjavasocket

發布時間: 2023-02-07 01:08:20

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會在系統調用前面加上一些它認為必需加的東西或者是它認為能夠方便編程人員使用的東西。

❷ 為什麼還要用c語言編寫socket呢現在java這么方便,想知道c來編socket有什麼好處,尤其在linux下,謝謝!

socket(也叫套接字)最初是在Unix系統上開發的網路通信的介面。
後來微軟等公司將它移植到了windows下,當然原來unix系統下的還是好用的。
對於socket可以這樣理解:
它就是一個函數庫,裡麵包括大量的函數和相應的數據結構,已經實現好了。
它支持網路通信。
程序開發人員可以通過閱讀相關的函數文檔,了解函數的使用方法,進行網路的編程。
兩種形式的socket:流式套接字,對應與TCP協議。
數據報套接字,對應與UDP協議。

有本《Linux環境高級編程》你可以看看

Java 和其它語言之間進行Socket通信使用Socket和ServerSocket類。
用JAVA編寫server,C語言編寫Client,當然可以實現通信(示例在最後)。

1、Socket和ServerSocket類庫位於java.net包中。ServerSocket用於伺服器端,Socket 是建立網路連接時使用的。在連接成功時,應用程序兩端都會產生一個Socket實例,操作這個實例,完成所需的會話。對於一個網路連接來說,套接字是平等的,並沒有差別,不因為在伺服器端或在客戶端而產生不同級別。不管是Socket還是ServerSocket它們的工作都是通過SocketImpl類及其子類完成的。
重要的Socket API:
java.net.Socket繼承於java.lang.Object,有八個構造器,其方法並不多,使用頻繁的三個方法:
. Accept方法用於產生"阻塞",直到接受到一個連接,並且返回一個客戶端的Socket對象實例。"阻塞"是一個術語,它使程序運行暫時"停留"在這個地方,直到一個會話產生,然後程序繼續;通常"阻塞"是由循環產生的。
. getInputStream方法獲得網路連接輸入,同時返回一個IutputStream對象實例,。
. getOutputStream方法連接的另一端將得到輸入,同時返回一個OutputStream對象實例。
注意:其中getInputStream和getOutputStream方法均會產生一個IOException,它必須被捕獲,因為它們返回的流對象,通常都會被另一個流對象使用。
2.如何開發一個Server-Client模型的程序
開發原理:
伺服器,使用ServerSocket監聽指定的埠,埠可以隨意指定(由於1024以下的埠通常屬於保留埠,在一些操作系統中不可以隨意使用,所以建議使用大於1024的埠),等待客戶連接請求,客戶連接後,會話產生;在完成會話後,關閉連接。
客戶端,使用Socket對網路上某一個伺服器的某一個埠發出連接請求,一旦連接成功,打開會話;會話完成後,關閉Socket。客戶端不需要指定打開的埠,通常臨時的、動態的分配一個1024以上的埠。

下面這個程序用JAVA建立了一個伺服器,它一直監聽10000埠,等待用戶連接,而用戶端則可以使用C寫的程序來連接該伺服器。
本程序在建立連接後給客戶端返回一段信息,然後結束會話。這個程序一次只能接受一個客戶連接。

import java.net.*;
import java.io.*;

public class Server
{
private ServerSocket ss;
private Socket socket;
private BufferedReader in;
private PrintWriter out;

public Server()
{
try
{
ss = new ServerSocket(10000);
while (true)
{
socket = ss.accept();
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(),true);

String line = in.readLine();
out.println("you input is :" + line);
out.close();
in.close();
socket.close();
}
ss.close();
}
catch (IOException e)
{}
}

public static void main(String[] args)
{
new Server();
}
}

❸ c語言和java 使用socket通信的時候 數據大小端轉換的問題

大小端轉換就是移位,拼接,用C實現很簡單。
至於解析出問題,可以約定雙方以位元組流進行通信,比如,約定一個浮點數拆成文本,或者一個32位長整拆成四個位元組,先傳送低位元組(或高位元組),約定好以後,兩邊都照做就可以了。

❹ 請教一下用JAVA和用C實現socket網路通信哪個效率更高高分求,在線等。

肯定是c的效率高,但是假如不是在特別苛刻的要求socket效率的地方區別並不明顯,也就是說在大部分應用情況下並沒有特別大的差異。java反而更容易些。

❺ java與c進行socket通訊byte問題

byte 由於在C java中都是有符號(-128到127)
所以你傳大於127的數字就出現溢出

C語言解決 : 定義unsigned 無符號
Java解決 : 使用short

❻ 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和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 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++ 要根據系統特性進行適當的修改。

熱點內容
c語言宏定義字元串 發布:2024-04-20 18:22:45 瀏覽:471
現在玩游戲的電腦需要什麼配置 發布:2024-04-20 17:09:57 瀏覽:195
游樂園的密碼一般為多少 發布:2024-04-20 17:09:51 瀏覽:41
興元安卓機怎麼進系統 發布:2024-04-20 17:07:16 瀏覽:806
我的世界伺服器如何放村民 發布:2024-04-20 17:05:35 瀏覽:359
手機反編譯dex 發布:2024-04-20 17:01:01 瀏覽:704
安卓怎麼設置微信拍一拍 發布:2024-04-20 16:44:48 瀏覽:569
三星3熱點密碼怎麼設置 發布:2024-04-20 16:30:52 瀏覽:579
用keil編譯顯示警告warn 發布:2024-04-20 16:27:09 瀏覽:894
訪問在哪兒 發布:2024-04-20 16:20:42 瀏覽:201