『壹』 誰有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程序如何相互通信
換下思路,C去調用資料庫,然後保存到資料庫阿java調用資料庫得到C處理完存入資料庫的數據就可以了.
結構如圖這樣就少想不同語言間的交流,而且java和C的交互不是很好,貌似java貌似可以支持DLL,但是不方便
『叄』 Java 和其它語言之間怎麼進行Socket通信用JAVA編寫server,c語言編寫Client,可以實現嗎怎麼實現
本答案提交時間:2011-6-12 17:17
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通信的時候 數據大小端轉換的問題
我也搞網路編程搞好久了,大小端這個問題倒是沒有遇到過啊,我同事做Java,我做IOS都一樣的,都是小端的。
建議你用抓包軟體抓下包看看,還有就是注意發送時數據對齊問題,不同的系統可能一樣的類型長度就不一樣,比如在mac系統中long型有8位元組,但是在IOS、VC中就只有四個位元組,一般使用socket發送數據時都是打包發送的(頭部一般都是固定的結構體),這個問題必須要注意
『伍』 java與c進行socket通訊byte問題
byte 由於在C java中都是有符號(-128到127)
所以你傳大於127的數字就出現溢出
C語言解決 : 定義unsigned 無符號
Java解決 : 使用short
『陸』 java接受c語言socket字元串
兩邊要對應的,才行。如果C也是按UTF8發送的,接收用readUTF()才行。
否則,就用一般的讀取函數
『柒』 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代碼
我跟你說說吧!
#include <stdio.h>
#include <string.h>
#define OUT 0
#define IN 1
void
move( int n, int x, int y, int z )
{
if ( n == 1 )
printf ( "%d-->%d\n", x, z );
else
{
move( n - 1, x, z, y );
printf( "%d-->%d\n", x, z );
move( n - 1, y, x, z );
}
}
int
main( int argc ,char *argv[] )
{
int h;
printf( "Input how many hanio there are:" );
scanf( "%d", &h );
printf( "The result is :\n" );
move( h, 1, 2, 3 );
getchar();
return ( 0 );
}
『玖』 java的socket怎麼與c/c++通訊(求一個簡單Demo)
親,socket不是都一樣嘛 ,如果java做客戶端,用socket直接connet到c++的伺服器ip與埠就ok,如果java做伺服器,c++做客戶端,c++的大概過程如下
創建套接字,設置連接的ip與埠,調用connect,然後read/send數據,closesocket
『拾』 java編寫的程序與C語言編寫的程序怎麼進行通信
您好,你可以用兩個不同進程之間的數據交互:
1、可以選擇socket通信
2、可以選擇文件,不過要注意好讀寫
3、消息傳遞,在windows下拋出一個消息//具體怎麼做我沒試過,只知道有這方法
4、資料庫//這個比較容易實現
這樣就可以選擇用不同語言寫出來的程序了