用java中的server,Java中?

本文目錄一覽:

Java中service和server有什麼區別?

一般來說, 我們會對一個完整的Java服務做一些架構切分, Server主要指的是服務本身, 一般可能是Springboot架構的啟動類, 而controller, service, dao等是作為代碼的結構拆分, 一般來說service是用來描述處理核心業務邏輯的相關代碼類, controller是用來作為對外暴露的接口類.

java中用serverSocket類如何向指定IP的客戶端發送數據

在客戶/服務器通信模式中, 服務器端需要創建監聽端口的 ServerSocket, ServerSocket 負責接收客戶連接請求。ServerSocket並不能直接向客戶端發送數據。

通常做法是,ServerSocket接收到一個連接請求,用accept建立連接:

socket = serverSocket.accept(); //接收客戶連接

然後啟動一個新的線程來處理和客戶端的收發數據的工作

Thread workThread = new Thread(new Handler(socket)); //創建一個工作進程

workThread.start(); //啟動工作進程

使用accept後的Socket去收發數據。

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();

}

}

java中serverSocket是幹什麼的 怎麼用

serversocket 建立的是socket的服務端,

socket建立的是客戶端。

例子

socket和serversocket (2010-05-07 04:17:11)轉載▼

public class Server {

public static void main(String[] args) {

Socket socket=null;

BufferedReader br=null;

PrintWriter pw=null;

try {

//創建服務器,並開放3081端口

ServerSocket server=new ServerSocket(3081);

while(true){

//監聽服務器端口,一旦有數據發送過來,那麼就將數據封裝成socket對象

//如果沒有數據發送過來,那麼這時處於線程阻塞狀態,不會向下繼續執行

socket=server.accept();

System.out.println(“客戶端信息:”+socket.getRemoteSocketAddress());

//從socket中得到讀取流,該流中有客戶端發送過來的數據

InputStream in=socket.getInputStream();

//InputStreamReader將字節流轉化為字符流

br=new BufferedReader(new InputStreamReader(in));

//行讀取客戶端數據

String info=br.readLine();

System.out.println(info);

OutputStream out=socket.getOutputStream();

pw=new PrintWriter(out);

pw.println(“服務器說:我扁死你”);

pw.flush();

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

try {

pw.close();

br.close();

socket.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

public class Client {

public static void main(String[] args) {

Socket socket=null;

PrintWriter pw=null;

BufferedReader br=null;

try {

//創建socket對象,並指明服務器的IP地址和端口號

socket=new Socket(“localhost”,3081);

//得到socket發送數據的輸出流

OutputStream out=socket.getOutputStream();

//將字節流包裝成字符流

pw=new PrintWriter(out);

//向服務器發送數據

pw.println(“客戶端說:建軍悶燒”);

//刷新流,確保數據能寫到服務器

pw.flush();

InputStream in=socket.getInputStream();

br=new BufferedReader(new InputStreamReader(in));

String info=br.readLine();

System.out.println(info);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

finally{

try {

pw.close();

socket.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

public class Client {

public static void main(String[] args) {

Socket socket=null;

PrintWriter pw=null;

BufferedReader br=null;

try {

//創建socket對象,並指明服務器的IP地址和端口號

socket=new Socket(“localhost”,3081);

//得到socket發送數據的輸出流

OutputStream out=socket.getOutputStream();

//將字節流包裝成字符流

pw=new PrintWriter(out);

//向服務器發送數據

pw.println(“客戶端說:建軍悶燒”);

//刷新流,確保數據能寫到服務器

pw.flush();

InputStream in=socket.getInputStream();

br=new BufferedReader(new InputStreamReader(in));

String info=br.readLine();

System.out.println(info);

} catch (Exception e) {

// TODO

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/291229.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-24 13:14
下一篇 2024-12-24 13:14

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論