導航:首頁 > IDC知識 > 伺服器客戶端通信流程

伺服器客戶端通信流程

發布時間:2020-12-29 08:30:36

1、怎麼通過伺服器實現客戶端與客戶端間的通信

客戶端指的是什麼?軟體還是電腦?,這個要看具體需求。你可以先了解下VPN。

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

首先,為了便於理解,我們一般把網路分為多個層次,這個層次的概念是很重要的基礎概念,你可以參考閱讀經典的謝希仁老師翻譯的《計算機網路》。 在進程之間的網路通信一般都是在「網路層」即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(實現),裡面很多例子不長但很經典,對於打好基礎很有幫助。

3、什麼是客戶端/伺服器通信模式

客戶端/伺服器模式又叫C/S模式,是一種軟體系統結構的一種,是基於企業內部網路的應用系統,能夠充分發揮客戶端的處理能力,對應的優點是客戶端響應快,安全性高

4、利用進程通信實現客戶機伺服器聊天程序的演算法流程圖和代碼

伺服器端(注意要先啟動伺服器端)

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

public class server extends Frame implements ActionListener {
Label label = new Label("交談內容");
Panel panel = new Panel();
TextField tf = new TextField(10);
TextArea ta = new TextArea();
ServerSocket server;
Socket client;
InputStream in;
OutputStream out;

public server() {
super("伺服器");
setSize(250, 250);
panel.add(label);
panel.add(tf);
tf.addActionListener(this);
add("North", panel);
add("Center", ta);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
show();
try {
server = new ServerSocket(4000);
client = server.accept();
ta.append("客戶機是:" + client.getInetAddress().getHostName() + "\n\n");
in =client.getInputStream();
out= client.getOutputStream();
} catch (IOException ioe) {
}
while (true) {
try {
byte[] buf = new byte[256];
in.read(buf);
String str = new String(buf);
ta.append("客戶機說:" + str + "\n\n");
} catch (IOException e) {
}
}
}

public void actionPerformed(ActionEvent e) {
try {
String str = tf.getText();
byte[] buf = str.getBytes();
tf.setText(null);
out.write(buf);
ta.append("我說:" + str + "\n");
} catch (IOException ioe) {
}
}

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

客戶端

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

public class client extends Frame implements ActionListener {
Label label = new Label("交談內容");
Panel panel = new Panel();
TextField tf = new TextField(10);
TextArea ta = new TextArea();
Socket client;
InputStream in;
OutputStream out;

public client() {
super("客戶機");
setSize(250, 250);
panel.add(label);
panel.add(tf);
tf.addActionListener(this);
add("North", panel);
add("Center", ta);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
show();
try {
client = new Socket(InetAddress.getLocalHost(), 4000);
ta.append("伺服器是:" + client.getInetAddress().getHostName() + "\n\n");
in = client.getInputStream();
out = client.getOutputStream();
} catch (IOException ioe) {
}
while (true) {
try {
byte[] buf = new byte[256];
in.read(buf);
String str = new String(buf);
ta.append("伺服器說:" + str + "\n");
} catch (IOException e) {
}
}
}

public void actionPerformed(ActionEvent e) {
try {
String str = tf.getText();
byte[] buf = str.getBytes();
tf.setText(null);
out.write(buf);
ta.append("我說:" + str + "\n");
} catch (IOException iOE) {
}
}

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

這個只能在自己一台電腦上先啟動伺服器再啟動客戶端才行,要想一台機子啟動伺服器端一台機子啟動客戶端需要把客戶端的 client = new Socket(InetAddress.getLocalHost(), 4000);改成 client = new Socket("伺服器Ip", 4000);(前提是兩台機子連在區域網裡面的)
沒時間寫,給你找個,看行不

5、客戶端程序和伺服器之間通信用的是什麼技術?

客戶端程序和伺服器之間通信用這是網路傳輸層的問題,在傳輸層上主要就是兩種數據包,即為TCP(可靠連接)、UDP(不可靠連接),這個其實與你想要做的伺服器和程序設計沒有大的關系,不知道你要搭建什麼伺服器,是windows還是linux 伺服器,在windows下面一般是ASP.net +SQL server (很多人現在也在windows下做apacha+php+mysql); 在linux下面是apacha+php+mysql;網站使用的是HTTP協議來實現網站的建設

6、SQL Server 伺服器端和客戶端是怎樣進行通信的?

默認情況下,SQL Server使用1433埠監聽,很多人都說SQL Server配置的時候要把這個埠改變,這樣別人就不能很內容易地知道使用容的什麼埠了。可惜,通過微軟未公開的1434埠的UDP探測可以很容易知道SQL Server使用的什麼TCP/IP埠了。不過微軟還是考慮到了這個問題,畢竟公開而且開放的埠會引起不必要的麻煩。在實例屬性中選擇TCP/IP協議的屬性。選擇隱藏 SQL Server 實例。如果隱藏了 SQL Server 實例,則將禁止對試圖枚舉網路上現有的 SQL Server 實例的客戶端所發出的廣播作出響應。這樣,別人就不能用1434來探測你的TCP/IP埠了(除非用Port Scan)。

7、採用UDP協議進行通信的服務端和客戶端一個大致流程的偽代碼?

起2個監聽線程分別綁2個埠
在來個線程池
ok
最好用MIna
nio之類的

8、Linux下實現簡單的TCP伺服器與客戶端通信

一直收的那個就不要寫輸入的代碼了,直接無限讀取就可以。
一直發的那個就不要寫輸出的代碼版了,直接無限輸入就可以;
當然如果想兩個都想在伺服器和客戶端各種實現,那麼加入多線程吧。一權個線程只管輸入,一個線程只管輸出

9、客戶端與伺服器端具體是怎麼通信的,伺服器返回的是什麼

服務端是架設在伺服器上面的
客戶端是安裝在本地電腦上面的
至於如何通信,主要是通過固定IP、帶寬、服務端資料庫來實現的。

10、客戶端與伺服器通信,有哪些方法?

和虛擬主機的只能通過網頁的方式post或者get通訊傳輸數據
畢竟虛擬主機可以使用的功能有限,asp和php都可以實現你想要的功能
估計你是拿來做驗證的吧

與伺服器客戶端通信流程相關的知識