導航:首頁 > 配伺服器 > 伺服器與客戶端兩個進程如何通信

伺服器與客戶端兩個進程如何通信

發布時間:2022-08-31 03:36:14

java中,怎樣實現cs模式的伺服器與客戶端的通信

Socket通信:
作為伺服器端:
//生成伺服器端,監聽伺服器設定的埠
ServerSocket
socketServer
=
new
ServerSocket(埠號);
//建立客戶端和伺服器端的鏈接,這時再看客戶端
Socket
socket
=
socketServer.accept();
作為客戶端:
//新建一個Socket,包含伺服器端的IP和埠號,這樣在伺服器啟動情況下可以建立和伺服器的鏈接.
Socket
socket
=
new
Socket("IP地址","埠號");
這時,伺服器端和客戶端的連接已經建立,如果需要通信和傳輸數據的話分別在伺服器端、客戶端新建流對象,可以通過流對象實現雙方之間的互通.
有關流的內容自己看書體會下就能寫出B/S結構的通信了。

❷ web客戶端與伺服器之間的通信的基本過程

(1) 連接 當客戶在瀏覽器上鍵入或單擊一個URL時,客戶程序就在網路上搜索定位正確的伺服器,並與其連接。
(2) 請求 在連接後,客戶程序向伺服器發出一個請求,要求伺服器向自己發送指定的信息。
(3) 響應 伺服器收到請求,就向客戶端傳回所需要的文件。
(4)關閉 伺服器發出數據後,就斷開與客戶端的連接,以便接受其他客戶的連接。

❸ 進程之間的客戶端與服務端是如何實現通訊的

首先,為了便於理解,我們一般把網路分為多個層次,這個層次的概念是很重要的基礎概念,你可以參考閱讀經典的謝希仁老師翻譯的《計算機網路》。 在進程之間的網路通信一般都是在「網路層」即IP層,我們編寫程序一般也都是基於這個層次或者這個層次之上的傳輸層或者應用層。語言(實際上是操作系統和庫函數)提供了封裝好的函數,讓我們可以不用關心鏈路層以及物理層的細節。 下面逐一回答你的問題: 1)初始化網路環境是什麼意思,有什麼作用? 為了建立通信連接,我們需要明確當前的網路環境是怎樣的,因為和單機系統的進程通信不同,網路進程間通信比較復雜,而且操作系統支持的網路協議也會很多,不同協議的工作方式不同,地址格式也不同。為了解決多重協議的識別問題,我們必須引入一些用於區分的概念並對其初始化。 2)套接字的意思和作用是什麼? 套接字提供了對網路連接的一系列封裝——雖然你可以自己寫,但完全沒有必要不是么?它根據指定的地址族、數據類型和協議來分配一個套介面的描述字及其所用的資源。例如TCP/IP的socket提供三種類型套接字(流式、數據報、原始),分別對應面向連接的服務(例如FTP)、無連接服務(例如NFS)和較底層的連接服務(例如IP或者自定義協議),你可以基於套接字提供的封裝比較方便的實現網路連接服務。 在IP層次以上網路通信的基本原理和電話或者電報的基本原理是非常相近的。TCP連接類似電話,UDP連接類似電報。 下面我以一些代碼片段(注意是幫助理解的片段,不能編譯執行)簡單地對其進行類比: fd = socket(AF_INET, SOCK_STREAM, 0); address.sin_family = AF_INET; address.sin_addr.s_addr = htonl(INADDR_ANY); address.sin_port = htons(1234); address_len = sizeof(address); //這就是在初始化網路環境,類似於你朋友買了一個電話,同時到電信公司申請了號碼,然後登記的分機是1234 bind(fd, (struct sockaddr *)&address, address_len); //好了,這是做了一個bind(綁定),類似於電信公司把電話號碼和你朋友家的哪個埠線連上了。 listenfd = listen(fd, 64) while(1){ ....一系列等待客戶端的操作,從略 } //這里在伺服器端一般會有一個無限循環,伺服器會一直等待來自客戶端的消息,類似於你朋友一直在等待你的電話。客戶端,類似的也有買電話(socket創建)和初始化,我就不寫了,預先設定好你要撥打的分機號碼是1234 rtval = connect(fd, (struct sockaddr *)&address, address_len); //上面的語句表示開始撥打電話了: //如果你的朋友接了電話,通話建立了(上面語句的返回值rtval不為-1),你就可以講話: writen(fd, (void *)data, strlen(data)); //對方講話,你聽: len = readline(fd, (void *)data2, 100); //講完了,掛電話,類似於下面的語句: close(fd); 整體情況大概就是這樣,所以可以看到計算機的實現和日常生活是很接近的!希望這可以幫助你理解網路通信。 最後建議閱讀TCP/IP詳解之卷2(實現),裡面很多例子不長但很經典,對於打好基礎很有幫助。

❹ 伺服器計算機埠和客戶端計算機埠,如何實現相互通信的呢希望懂網路專…

TCP連接建立之後,伺服器和客戶端就可以互通數據了,可以通過HTTP、FTP、SMTP等等的協議進行各種應用,伺服器有通用的服務埠,例如80是HTTP服務,21是FTP服務,25是SMTP服務,這些埠號是通用的。而用戶的埠號則是不確定的。所以,客戶端需要某種服務時會先訪問伺服器的某個埠,並且通過TCP建立過程,告知伺服器自己的埠號。正如你所說的,黑客可以對客戶端偽裝成伺服器、對伺服器偽裝成客戶端,分別建立TCP連接,然後獲取用戶和伺服器的信息。現在很多釣魚陷阱就是這樣盜取用戶帳號、密碼的。木馬攻擊又是另外一回事了,木馬主要是把木馬程序載入用戶電腦,然後盜取用戶信息,當然通過中間人攻擊來注入木馬是常用的手段。

❺ 伺服器計算機埠和客戶端計算機埠,如何實現相互通信的呢希望懂網路專業知識的大師指點!

伺服器和客戶端在通信之前會先建立TCP連接,就是常說的三次握手過程。
TCP連接建立之後,伺服器和客戶端就可以互通數據了,可以通過HTTP、FTP、SMTP等等的協議進行各種應用,伺服器有通用的服務埠,例如80是HTTP服務,21是FTP服務,25是SMTP服務,這些埠號是通用的。而用戶的埠號則是不確定的。所以,客戶端需要某種服務時會先訪問伺服器的某個埠,並且通過TCP建立過程,告知伺服器自己的埠號。

正如你所說的,黑客可以對客戶端偽裝成伺服器、對伺服器偽裝成客戶端,分別建立TCP連接,然後獲取用戶和伺服器的信息。現在很多釣魚陷阱就是這樣盜取用戶帳號、密碼的。
木馬攻擊又是另外一回事了,木馬主要是把木馬程序載入用戶電腦,然後盜取用戶信息,當然通過中間人攻擊來注入木馬是常用的手段。

❻ java網路編程,怎樣在客戶端和伺服器間實現通信。

寫個簡單點的伺服器跟客服端就行了我寫了個很簡單的,只能在一個客戶端跟一個伺服器通信,在控制台輸入下面這個是伺服器import java.io.*;
import java.net.*;
import java.util.Scanner;public class Server
{
public static void main(String[] args)
{
try {
ServerSocket server=new ServerSocket(8888);//定義客戶端的埠號
Socket client=server.accept();//定義一個Socket對象

InputStream is=client.getInputStream();//伺服器接受信息輸入流,也就是接受從伺服器段發送過來的消息
BufferedReader br=new BufferedReader(new InputStreamReader(is));//用bufferedreader包裝下輸入流

OutputStream os=client.getOutputStream();//這是用來給伺服器發送消息的輸出流
PrintStream ps=new PrintStream(os);
Scanner scanner=new Scanner(System.in);//從鍵盤輸入字元串

boolean flag=true;//定義一個死循環,讓伺服器不停的接受從客戶端發送來的字元串
while(flag)
{
String s=br.readLine();//s是從客戶端接受到得字元串
System.out.println(s);

String s2=scanner.nextLine();//s2是寫給客戶端的字元串
ps.println(s2); //給客戶端發送你寫的東西
}
client.close();
} catch (IOException e) {//try 跟catch你不用管,這是用來處理異常的,就是固定格式

e.printStackTrace();
}
}
} 下面是客戶端import java.io.*;
import java.net.*;
import java.util.Scanner;public class Client
{ public static void main(String[] args)
{
try
{
Socket client=new Socket("192.168.--.--",8888);//IP地址是個字元串,埠號是個整數,這個埠號要跟前面你寫的那個一樣,還有IP地址,寫你的機器的IP地址

InputStream is=client.getInputStream();//這邊的兩個流跟上面伺服器的差不多的作用
BufferedReader bf=new BufferedReader(new InputStreamReader(is));

OutputStream os=client.getOutputStream();
PrintStream ps=new PrintStream(os);
Scanner scanner=new Scanner(System.in);
boolean flag=true;
while(flag)//這句話可以讓客戶端不停的說話
{
String s2=scanner.nextLine();
ps.println(s2);

String s=bf.readLine();
System.out.println(s); }

client.close();

}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
} }}

❼ java網路編程應該怎樣在客戶端和伺服器間實現通信

以前寫的,照貼了。。。伺服器端:import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
import java.net.*;/*6、 採用UDP協議,編寫一個Java網路應用程序,該應用分伺服器端程序和客戶端程序兩部分。
* 客戶端指定一個伺服器上的文件名,讓伺服器發回該文件的內容,或者提示文件不存在。
* (20分)(服務端程序和客戶端程序分別命名為Server.java和Client.java)*/
public class N4BT6 extends Frame
{
DatagramSocket socket ;
DatagramPacket packet ;byte[] buf ;
File file ;
FileInputStream input;
String message = "該文件不存在";
TextArea text;
public N4BT6(String title)
{
super(title);
text = new TextArea(6,4);
add(text);
setSize(400, 300);
setVisible(true);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
}
});

buf = new byte[1024];
try
{
socket = new DatagramSocket(1230);
packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
file = new File(new String(packet.getData()));
socket = new DatagramSocket();
}
catch (Exception e)
{e.printStackTrace();
}

if(file.exists())
{
try
{
buf = new byte[(int)file.length()];
packet = new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),1234);
input = new FileInputStream(file);
input.read(buf);
socket.send(packet);
}
catch (IOException e)
{
e.printStackTrace();
}
}
else
{
try
{
packet = new DatagramPacket(message.getBytes(),message.getBytes().length,
InetAddress.getLocalHost(),1234);
socket.send(packet);
}
catch (Exception e)
{
e.printStackTrace();
}
}

}
public static void main(String[] args)
{
new N4BT6("Server");
}
}
客戶端:import java.awt.*;
import java.awt.event.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class N4BT6_2 extends Frame
{
TextArea text;
String message = "Q.txt";
DatagramSocket socket ;
DatagramPacket packet;
byte[] buf;
public N4BT6_2(String title)
{
super(title);
text = new TextArea(6,4);
add(text);
setSize(400, 300);
setVisible(true);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
}
});
try
{

socket = new DatagramSocket();
packet = new DatagramPacket(message.getBytes(),message.getBytes().length,
InetAddress.getLocalHost(),1230);
socket.send(packet);
}
catch (Exception e)
{
e.printStackTrace();
}

try
{
buf = new byte[1024];
socket = new DatagramSocket(1234);
packet = new DatagramPacket(buf,buf.length);
socket.receive(packet);
text.append(new String(buf));
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
new N4BT6_2("Client");
}
}

❽ 服務進程與一般程序進程通信要注意什麼問題

你不能指望WM_COPYDATA 在兩台計算機直線傳數據。

通信的方式主要是幾個層面的:

1) 傳輸層面的通信,這里主要是指TCP/UDP , 你可以在服務程序上開一個Socket 埠進行偵聽,然後客戶端程序開Socket埠去連接伺服器程序。 這么做的話,你什麼數據都可以傳,但是不好的地方就是需要自己定義傳輸控制協議。

2) 架構在現有應用層協議上的通信。 典型的如在HTTP 協議上做的通信。數據傳輸協議由HTTP 本身控制,自己只需要關心自己的數據。這裡面最最典型的情況就是WebService。伺服器端用Java 或者.NET 將服務功能編寫為WebService,客戶端通過HTTP協議向伺服器以POST 方式發送數據,並得到伺服器端的計算結果。 使用這種方式都是用標準的通信埠,可以避開網路上的防火牆帶來的煩惱。不像直接用Socket 傳輸需要自定義埠,在網路上開例外,並且還得處理代理的情況。 當然你還可以在HTTP協議上傳輸其他的協議,比如MSNP。

3) 基於對象層面的通信。 這里主要是指COM+ .NET Remoting 等等,用戶完全不必關心數據的傳輸和格式。只需關心業務的處理。客戶端程序並不直接調用遠端伺服器程序,而是調用本地的一個伺服器程序代理對象,再由代理對象向伺服器程序進行數據交互通信。 微軟提供的此類通信協議主要是RPC 和WebService。

一般來說,如果你需要通信的數據種類單一,要求處理速度快,可以考慮直接用Socket。 如果通信協議復雜,就需要使用WebService 或者COM+ 通過RPC 協議進行通信。

❾ c++如何讓兩個Tcp客戶端通過伺服器 連接後相互通信

在伺服器上要開發一個TCP服務端,功能是維護在線客戶端列表、處理客戶端(假設為客戶1)連接請求,將客戶1的請求推送到客戶2,根據客戶2 的響應決定是不是在客戶1和2之間建立應用連接,一旦應用連接建立,服務端就持續交換轉發客戶1、2的數據,直到其中一方斷開,這是所有數據都通過伺服器中轉的方式;還有一種方式服務端僅僅維護在線用戶列表,客戶端相互直接連接,數據不通過伺服器中轉,具體實現還有許多細節需要處理,希望能夠幫到你。

❿ java 網路編程: 如何實現客戶端與客戶端之間的之間通信

伺服器告知雙方對方的ip地址,並協調由哪一方主動連接。
如 協調結果是: 把c2的地址告訴c1,讓c1主動連接c2,讓c2打開埠等待連接。

要考慮認證問題,比如c2如何知道連接上來的是c1,而不是其他人,就需要有認證機制。
另外要考慮內網問題。由於從外部連接內網裡面的IP地址是相當繁瑣復雜的,所以需要特別的機制處理。

閱讀全文

與伺服器與客戶端兩個進程如何通信相關的資料

熱點內容
如何查app文件在哪裡 瀏覽:65
美的美居app有什麼功能 瀏覽:410
安卓手機如何刷為華為系統 瀏覽:394
伺服器如何搭建自己的簡歷 瀏覽:580
編譯的程序名稱 瀏覽:629
安卓機如何使用蘋果同款鬧鍾 瀏覽:623
說文解字中華書局pdf 瀏覽:149
java反序列化xml 瀏覽:456
小藍app為什麼消息未連接 瀏覽:151
甲烷是不是可壓縮流體 瀏覽:366
別克車怎麼連接安卓手機投屏 瀏覽:566
負債凈值比率演算法 瀏覽:721
命令行窗口怎麼添加目錄 瀏覽:385
37的八位數源碼 瀏覽:932
空調壓縮機連接桿抱死 瀏覽:632
汽車空調壓縮機進了泥土怎麼辦 瀏覽:710
寧德有什麼好的買菜app 瀏覽:669
cocos2dx游戲開發之旅源碼 瀏覽:460
arcgis在哪輸入命令 瀏覽:459
程序員面經哪裡刷 瀏覽:874