1. 程式人生 > >java與c語言之間的socket通訊—c客戶端java伺服器端

java與c語言之間的socket通訊—c客戶端java伺服器端

寫在前面的宣告:程式例子均執行在ubuntu(是一個以桌面應用為主的Linux作業系統)上。當然你也可以把java執行在其它系統上,這裡只是為了方便。

上一篇文章已經說明了關於socket的一些知識,but這是遠遠不夠的,我相信只要你感興趣,學習它並不是什麼難事。

好吧,我想你已經迫不及待地想看看 c客戶端 java 伺服器端通訊是什麼樣子了,我也是;

同樣的這只是一個小例項,不過你同樣可以學到很多東西,我們開始吧!

首先是伺服器端MyServer.java的程式碼:

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

public class MyServer { 
	public static void main(String[] args) throws IOException{ 
		ServerSocket server=new ServerSocket(5678); 
		while(true){
		Socket client=server.accept();
		BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream())); 
			String str=in.readLine(); 
			System.out.println(str);  
		client.close();
		} 
	} 
} 

看下面的截圖,你就可以執行它:


然後是客戶端client.c的程式碼:

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

int main() {
	int sockfd;
	int len;
	struct sockaddr_in address;
	int result;
	char* ch;
	while(1){
		sockfd = socket(AF_INET,SOCK_STREAM,0);
		address.sin_family = AF_INET;
		address.sin_addr.s_addr = inet_addr("192.168.0.123");
		address.sin_port = htons(5678);
		len = sizeof(address);
		result = connect(sockfd,(struct sockaddr *)&address,len);
		if(result == -1) {
			perror("oops:client\n");
			exit(1);
		}
		printf("請輸入你要傳輸的資料\n");
		gets(ch);
		len = strlen(ch);
		ch[len] = '\0';
		printf("%d, %s\n", len, ch);
		write(sockfd,ch,len+1);
		close(sockfd);
	}
	exit(0);
	return 0;
}

同樣執行它:


好吧,我不得不說整個流程是如此的簡單,以至於我們都還沒有過癮呢。

socket程式設計的套路是很死的,難道不是嗎?客戶端和伺服器端都是固定不變的編寫套路,按招出牌就好,唯一的差別就在於不同的語言和系統之間可能編碼不同、API不同而已。

這裡只是一個引導而已,不過其中還是有很多可以學到,不如大埠、小埠的轉換,不如傳送字串結束符的重要性等等。

希望這些能對你的學習有點幫助!

相關推薦

Linux下c語言實驗Websocket通訊客戶伺服器測試程式碼

Websocket是一種可雙向通訊的網路協議,其底層的資料收發是基於socket的,所以使用c語言來實現理論上是沒有問題的,主要難點在於協議中要求對個別資料進行加密處理,這些加密方法(庫)在java、c#等專門開發web的平臺中都是自帶的API(隨調隨到),而在用到c

javac語言之間socket通訊c客戶java伺服器

寫在前面的宣告:程式例子均執行在ubuntu(是一個以桌面應用為主的Linux作業系統)上。當然你也可以把java執行在其它系統上,這裡只是為了方便。 上一篇文章已經說明了關於socket的一些知識,but這是遠遠不夠的,我相信只要你感興趣,學習它並不是什麼難事。 好吧,我

C#C++和C語言之間資料型別的對應

一、C#與C++資料型別的對應表  

Socket通訊——C++伺服器Java客戶

//更新 這件事可以用現有的序列化框架來做 比如 protobuf 一句話來說就是,C++和Java 通過socket進行通訊、資料傳輸,通過傳送“位元組流”即可。 位元組對於C++和java來說是通用的,但是傳輸的過程有許多問題需要注意,我為了弄清楚這個過程,查了一些資料

java寫的一個利用socket通訊C/S小例子

Server的原始碼: import java.net.*;import java.io.*; public class Server{private ServerSocket ss;private Socket socket;private BufferedReader i

Linux下C語言socket網絡編程

網絡編程 服務器 enter 編程 scanf 路由 client p s drl Server.c 1 #include <sys/types.h> 2 #include <sys/socket.h> 3 #include <n

Linux下C語言進程通訊編程

col 映射 一個 標識 define [] clas 操作 style 代碼: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <sys/shm.h> 4 /****

C語言網絡通訊的示例

網絡編程#include <stdio.h> #include <winsock2.h> #include <stdlib.h> #include <string.h> #pragma comment(lib,"ws2_32.lib") #

C語言實現Socket簡單通信

簡單 置0 tin led AS accep sin ive receive 服務端 #include<stdio.h> #include<stdlib.h> #include<errno.h> #include<string.h

C# FrameworkAPI之Socket通訊

服務端: 1:建立一個socket的物件 Socket socketserver=new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 第一個引數是指定socket物件使用的定址方案,

python 實現和 C的IP socket通訊如何打包資料?

2011-12-28 伺服器端是C/C++寫的,python用於客戶端傳送訊息,進行通訊。這種模式可以用於壓力測試,方便修改協議。 問題: 1.python 對於組包和二進位制的操作沒有C語言那麼方便,如何針對資料型別打包?

java 服務,實現服務客戶之間通訊以及客戶之間通訊

此服務端是利用socket進行通訊 ServerSocket serversocket = new ServerSocket(12333); 使用本機的12333埠進行通訊,可以自己選擇 一般選擇10000以後的埠不會與其他服務衝突 import j

C語言socket概述

在Linux中,一切都是檔案,除了文字檔案、原始檔、二進位制檔案等,一個硬體裝置也可以被對映為一個虛擬的檔案,稱為裝置檔案。例如,stdin 稱為標準輸入檔案,它對應的硬體裝置一般是鍵盤,stdout 稱為標準輸出檔案,它對應的硬體裝置一般是顯示器。對於所有的檔案,都可以使用 read() 函式讀取資料,使用

plc c指令碼(c script) socket通訊

client  #include "apdefap.h" void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { // WINCC:TAGNAME_SECTION

java Socket通訊客戶服務相互發訊息

1.通訊過程 網路分為應用層,http、ssh、telnet就是屬於這一類,建立在傳輸層的基礎上、其實就是定義了各自的編碼解碼格式,分層如下: 2.Socket連線 上述通訊都要先在傳輸層有建立連線的基礎上才能完成,TCP通過三次握手建立連線:

Java後臺js前端之間通訊問題

      今天寫程式碼遇到一個問題,就是需要在js中獲取後臺傳過來的list集合,還需要對list進行遍歷獲取裡面的物件,首先想到的是將list繫結到request物件上轉發到前端,然後用EL表示式直接獲取該list集合,可是遍歷該list出問題了,因為此時list已經不

有人說學了C語言,兩天就能學會Java,兩個星期就可以找工作?

作為一個做過十幾年程式碼的老司機,學習程式設計如果真的這麼簡單就不會導致現在各大公司還在喊著招不到人的情況了,雖然程式設計領域裡面有觸類旁通的說法,但這個說法只是針對於對於一種程式設計已經掌握到一定程度了,不是簡單的學過或者做過就可以輕鬆的轉向別的程式語言了,換句話來講如果一種程式語言學的馬馬虎虎,

Unity3D —— Socket通訊(C#)

前言:         在開始編寫程式碼之前,我們首先需要明確:聯網方式、聯網步驟、資料收發以及協議資料格式         當然在設計時也應該減低程式碼的耦合性,儘量使得網路層可以在其他地方進行復用,這就需要我們進行介面式的開發。我們這裡使用的通訊模式是Socket強連線

Linux C語言Socket程式設計例子(TCP和UDP)

     套接字是一種程序間的通訊的方法,不同於以往介紹的程序間通訊方法的是,它並不侷限於同一臺計算機的資源,例如檔案系統空間,共享記憶體或者訊息佇列。套接字可以認為是對管道概念的擴充套件——一臺機器上的程序可以使用套接字與另一臺機器上的程序通訊。因此客戶與伺服器可以分散在網

Linux下C語言串列埠通訊

最近在做一個GPS專案,第一部分是將開發板和GPS用串列埠通訊,接受GPS上傳來的資料。Linux下所有的裝置都是以檔案形式儲存的,串列埠也是。整個串列埠通訊的流程圖為:所用到的標頭檔案為:#include<stdio.h>#include<fcntl.h&