java伺服器端
㈠ java客戶端與伺服器端
沒有描述清楚。按照字面理解,服務端根據客戶端發送的信息判斷是否發送文件是嗎?伺服器端根據客戶端請求的信息,如果要返迴文件,伺服器端讀取文件向客戶端寫文件,比如讀取文件向客戶端寫位元組流。客戶端肯定是不能直接訪問伺服器端文件的。如果文件是放在可以公開訪問的地址,返回地址,客戶端下載就是了。所以你的問題沒有描述清楚。
㈡ java伺服器開發是做什麼和web端的區別是什麼
web開發,是開發服務端的,開發好的web程序,打包成war,然後放到web容器中運行,而web容器,是部署在伺服器中的。
web的客戶端就是瀏覽器,教你設計頁面,學CSS/HTML之類的。
標準的web伺服器只具有與客戶端瀏覽器通訊的功能,不能處理業務邏輯請求。
需要編寫程序來復制處理客戶端的請求。通過組件來處理客戶端的請求,這個組件就是實現特定規范的可以單獨部署的軟體模塊。組件必須通過容器來實現。容器是實現特定規范的程序,負責組件的運行環境和管理組件的生命周期。tomcat,weblogic都提供了容器。
web端可以理解為tomcat,並且tomcat中運行著你編寫的程序,這個程序稱為web應用。
java伺服器開發就是通過java語言來編寫程序,組合成web應用,將來部署到tomcat中,
編寫的這些程序就是組件,用來處理客戶端請求的。為了高效還會使用一些框架和技術來配合java程序,比如SpringMVC,struts2,Servlet。
㈢ 伺服器端為什麼用java開發
伺服器端用java開發,不快也不容易。使用java無非是更看重java的跨平台性、安全性,或許多少帶有些個人喜好,會顯得高大上一些,沒人強制你必須使用java。
㈣ java伺服器接收客戶端請求怎樣實現的
伺服器端代碼:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Socket通訊伺服器端
* @author 米強
*
*/
public class ServerMain {
public ServerMain() {
try {
// 構造伺服器ServerSocket對象,參數為伺服器端開放的埠號
ServerSocket ss = new ServerSocket(30102);
System.out.println("伺服器准備就緒!");
// 死循環可以使伺服器持續處於接收客戶端狀態
while(true){
// 該方法使程序阻塞,等待客戶端的鏈接,當監聽到客戶端的鏈接,創建一個Socket對象與客戶端單獨會話
Socket s = ss.accept();
// 為了不影響伺服器監聽其它客戶端,這里開啟了一個線程,由線程處理與這個客戶端的會話
new ServerThread(s).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ServerMain();
}
}
/**
* 伺服器端與客戶端會話的線程
*/
class ServerThread extends Thread {
private Socket s = null;
private BufferedReader read = null;
private PrintStream print = null;
public ServerThread(Socket s) {
this.s = s;
try {
// 從Socket中獲取輸入流和輸出流,由於我們只做一個簡單的字元串通訊,所以採用BufferedRead和PrintStream來封裝輸入、輸出流
read = new BufferedReader(new InputStreamReader(s.getInputStream()));
print = new PrintStream(s.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 線程的運行run方法
*/
public void run() {
try {
String message = null;
// 這里循環可以使伺服器持續的接收客戶端信息。read.readLine()通過輸入流讀取一段字元串,賦值給message變數,如果message字元串不為「exit」則循環,否則結束循環
while (!(message = read.readLine()).equals("exit")){
// 將字元串前面添加「返回:」,再發回客戶端
print.println("返回:" + message);
}
} catch (IOException e) {
} finally {
// 在 finally 代碼塊中無論如何都會執行下面代碼:
try {
// 如果沒有關閉Socket
if(!s.isClosed()){
// 關閉Socket鏈接
s.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
客戶端代碼:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
/**
* Socket通訊客戶端
* @author 米強
*
*/
public class ClientMain {
public ClientMain() {
try {
// 構造與伺服器通訊的Socket對象,參數為伺服器IP地址(String)和埠號(int),埠號需要和伺服器端開放的埠號對應
Socket s = new Socket("192.168.1.100", 30102);
// 啟動一個線程與伺服器通訊,並把鏈接伺服器的Socket對象傳遞過去
new LinkThread(s).start();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ClientMain();
}
}
/**
* 與伺服器通訊的線程
*/
class LinkThread extends Thread {
private Socket s = null;
// 輸出流
private PrintStream out = null;
// 緩沖輸入流
private BufferedReader in = null;
// 錄入文字的Scanner對象
private Scanner scanner = null;
public LinkThread(Socket s) {
// 將Socket對象實例保存在全局變數中,因為run方法中我們還要用它斷開鏈接
this.s = s;
try {
// 從Socket中獲取輸入流和輸出流,由於我們只做一個簡單的字元串通訊,所以採用BufferedRead和PrintStream來封裝輸入、輸出流
out = new PrintStream(s.getOutputStream());
in = new BufferedReader(new InputStreamReader(s.getInputStream()));
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 線程的運行run方法
*/
public void run() {
// 構造Scanner對象
scanner = new Scanner(System.in);
System.out.println("提示:如果要結束本次會話,請輸入「exit」指令!");
try {
// 死循環可以使客戶端不斷的向伺服器發送信息,不用擔心循環無法結束,後面的return語句可以結束整個線程。
while(true){
// 提示用戶輸入文字
System.out.print("請輸入:");
// 將用戶輸入的字元串保存在message變數中
String message = scanner.nextLine();
// 通過輸出流發送字元串
out.println(message);
// 清空緩沖,強制輸出
out.flush();
// 獲取伺服器返回的字元串
String str = in.readLine();
// 如果返回的字元串存在
if(str != null){
// 顯示在控制台
System.out.println(str);
}else{
// 提示會話結束,並結束線程
System.out.println("本次會話結束!");
return;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 在 finally 代碼塊中無論如何都會執行下面代碼:
try {
// 如果沒有關閉Socket
if(!s.isClosed()){
// 關閉Socket鏈接
s.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
㈤ java裡面什麼是伺服器端編程
你寫的程序放在伺服器電腦上運行,叫做伺服器端編程。
既然是叫做伺服器,也說明你寫的程序要可以接受客戶端的互動。
你寫的程序放在客戶端上運行,叫做客戶端編程。
㈥ java 伺服器怎樣給客戶端傳輸數據
java需要利用scoket實現網路通信,在通信時可以利用是從客廳、獲取輸入輸出流達到傳輸數據效果
㈦ JAVA的伺服器和客戶端怎麼做
樓上的太長了吧,我寫個簡單的
import java.net.*;
import java.io.*;
import java.util.*;
/**
* TCP協議下單向通信的客戶端程序。
* @author new
*
*/
public class TCPClientA {
public static void main(String[] args) {
Socket s=null;
try {
s=new Socket("127.0.0.1",8888);
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
String str=br.readLine();
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
}finally{
if(s!=null)try{s.close();}catch(IOException e){}
}
}
}
================================
import java.net.*;
import java.io.*;
import java.util.*;
/**
* TCP協議下單向通信的伺服器端程序。
* @author new
*
*/
public class TCPServerA {
public static void main(String[] args) {
ServerSocket ss=null;
Socket s=null;
PrintStream ps=null;
try {
ss=new ServerSocket(8888);
while(true){
System.out.println("伺服器已啟動,在8888埠:");
s=ss.accept();
System.out.println("得到 "+s.getInetAddress()+" 的連接請求...");
ps=new PrintStream(s.getOutputStream());
ps.println(new Date());
ps.flush();
System.out.println("已向客戶端發送數據!");
}
} catch (IOException e) {
e.printStackTrace();
}finally{
if(ps!=null)ps.close();
if(s!=null)try{s.close();}catch(IOException e){}
if(ss!=null)try{ss.close();}catch(IOException e){}
}
}
}
㈧ java伺服器端用傳輸給客戶端文件流(fileinputstream),客戶端應該如何接收(socket )
其實這個問題你應該先想一下socket到底是一個什麼東西,在網路編程中socket到底用來做什麼的。socket:在操作系統內核中它代表網路連接的一個端點(endpoint),在應用程序中它代表一個打開的文件。socketpair唯一確定的一條網路連接,socketpair就是客戶端socket和服務端socket的一個組合。也就是客戶端ip和port與服務端ip和port的組合。一條網路連接也就是一條通信的信道,tcp連接代表的信道是全雙工的。以信道來講,邏輯上就存在兩個管道來代表輸出與輸入來發送和接收信息。
那麼在應用程序上我們就可以拿到這2個管道來完成socket之間的通信。
以你的應用來看輸出流fos就代表著圖中的紅色管道,那麼在服務端就應該是這個樣的。
ScoketconnSock=serverSocket.accept();//connSock代表著服務端的Socket
InputStreamis=connSock.getInputStream();//輸入流is代表圖中的紅色管道
OutputStreaos=connSock.getOutputStream();//輸出流os代表圖中的綠色管道
在服務端有一個位元組緩沖區來存放從is讀取的位元組數據
byte[]buffer=newbyte[1024];
然後服務端讀取數據來填充這個位元組緩沖區
is.read(buffer);//比如這樣
然後就根據你的需求來操作這個buffer了。
然後把處理過後的數據通過os發送給客戶端。os就是圖中的那個綠色管道
os.write(處理過後的數據);
㈨ 用java編寫app的伺服器端要學哪些東西
首先,App的服務端跟Web的服務端沒有多大區別,而且在實際的開發過程中,業務邏輯也都是共用一套,只是會針對不同的客戶端做不同的適配(這點可參考Amazon,其對PC的web端,移動的Web端,移動的App都做了不同程度的適配).
其次,既然與Web的服務端沒多大區別,那所用的技術也大同小異,對於App而言,服務端更多是一個數據介面,所以框架頁大同小異;
最後,大致總結一下:
技術:
網路通信: tcp,http等;
Web服務:servlet, cgi腳本,asp等;
系統調度:多線程,並發等;
框架:
對應不同的web服務技術,採用的編程語言不同;
對應不同的網路通信協議,採用的框架也不同,netty->tcp,servlet等web服務框架->http等;
對應系統調度,有不同的多線程,多進程通信框架等;
對應提供不同的服務介面,有web service和restful兩大類,前者基於soap協議,後者基於http協議,對應的框架就很多,不一一敘述;