最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java Socket編程心跳包創(chuàng)建實例解析

 更新時間:2017年12月26日 11:49:51   作者:飄楊......  
這篇文章主要介紹了Java Socket編程心跳包創(chuàng)建實例解析,具有一定借鑒價值,需要的朋友可以參考下

1.什么是心跳包?

心跳包就是在客戶端和服務器間定時通知對方自己狀態(tài)的一個自己定義的命令字,按照一定的時間間隔發(fā)送,類似于心跳,所以叫做心跳包。

用來判斷對方(設備,進程或其它網(wǎng)元)是否正常運行,采用定時發(fā)送簡單的通訊包,如果在指定時間段內(nèi)未收到對方響應,則判斷對方已經(jīng)離線。用于檢測TCP的異常斷開?;驹蚴欠掌鞫瞬荒苡行У呐袛嗫蛻舳耸欠裨诰€,也就是說,服務器無法區(qū)分客戶端是長時間在空閑,還是已經(jīng)掉線的情況。所謂的心跳包就是客戶端定時發(fā)送簡單的信息給服務器端告訴它我還在而已。代碼就是每隔幾分鐘發(fā)送一個固定信息給服務端,服務端收到后回復一個固定信息如果服務端幾分鐘內(nèi)沒有收到客戶端信息則視客戶端斷開。

比如有些通信軟件長時間不使用,要想知道它的狀態(tài)是在線還是離線就需要心跳包,定時發(fā)包收包。發(fā)包方:可以是客戶也可以是服務端,看哪邊實現(xiàn)方便合理,一般是客戶端。服務器也可以定時發(fā)心跳下去。一般來說,出于效率的考慮,是由客戶端主動向服務器端發(fā)包,而不是服務器向客戶端發(fā)??蛻舳嗣扛粢欢螘r間發(fā)一個包,使用TCP的,用send發(fā),使用UDP的,用sendto發(fā),服務器收到后,就知道當前客戶端還處于“活著”的狀態(tài),否則,如果隔一定時間未收到這樣的包,則服務器認為客戶端已經(jīng)斷開,進行相應的客戶端斷開邏輯處理。

2.以下是實現(xiàn)Java心跳包的簡單實例

a)服務器端Server.java

package cn.yw.socket.heart;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server extends Thread{
	private ServerSocket server = null;
	Object obj = new Object();
	@Override
	  public void run() {
		try{
			while(true){
				server = new ServerSocket(25535);
				Socket client = server.accept();
				synchronized(obj){
					new Thread(new Client(client)).start();
				}
			}
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}
	/**
   * 客戶端線程
   * @author USER
   *
   */
	class Client implements Runnable{
		Socket client;
		public Client(Socket client){
			this.client = client;
		}
		@Override
		    public void run() {
			try{
				while(true){
					ObjectInput in = new ObjectInputStream(client.getInputStream());
					Entity entity = (Entity)in.readObject();
					System.out.println(entity.getName());
					System.out.println(entity.getSex());
				}
			}
			catch(Exception e){
				e.printStackTrace();
			}
		}
	}
	/**
   *程序的入口main方法
   * @param args
   */
	public static void main(String[] args){
		new Server().start();
	}
}

b)客戶端Client.java

package cn.yw.socket.heart;
public class Client extends Thread{
	@Override
	  public void run() {
		try{
			while(true){
				ClientSender.getInstance().send();
				synchronized(Client.class){
					//          this.wait(5000);
					Thread.sleep(2000);
				}
			}
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}
	/**
   * 程序的入口main方法
   * @param args
   */
	public static void main(String[] args){
		Client client = new Client();
		client.start();
	}
}
package cn.yw.socket.heart;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class ClientSender{
	private ClientSender(){
	}
	Socket sender = null;
	private static ClientSender instance;
	public static ClientSender getInstance(){
		if(instance==null){
			synchronized(Client.class){
				instance = new ClientSender();
			}
		}
		return instance;
	}
	public void send(){
		try{
			sender = new Socket(InetAddress.getLocalHost(),25535);
			while(true){
				ObjectOutputStream out = new ObjectOutputStream(sender.getOutputStream());
				Entity obj = new Entity();
				obj.setName("syz");
				obj.setSex("男");
				out.writeObject(obj);
				out.flush();
				Thread.sleep(5000);
			}
		}
		catch(Exception e){
		}
	}
}

3.實體類Entity.java

package cn.yw.socket.heart;
import java.io.Serializable;
public class Entity implements Serializable{
	private String name;
	private String sex;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
}

總結(jié)

以上就是本文關于Java Socket編程心跳包創(chuàng)建實例解析的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:

Java多線程編程實現(xiàn)socket通信示例代碼

Java編程利用socket多線程訪問服務器文件代碼示例

如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關文章

  • Java實現(xiàn)公用實體類轉(zhuǎn)Tree結(jié)構

    Java實現(xiàn)公用實體類轉(zhuǎn)Tree結(jié)構

    這篇文章主要為大家介紹了一個Java工具類,可以實現(xiàn)Java公用實體類轉(zhuǎn)Tree結(jié)構,文中的示例代碼簡潔易懂,感興趣的小伙伴可以參考一下
    2024-10-10
  • Java 程序初始化順序

    Java 程序初始化順序

    這篇文章主要介紹了Java 程序初始化順序,在Java語言中,當實例化對象時,對象所在類的所有成員變量首先要進行初始化,只有當所有的類成員完成了初始化之后,才會調(diào)用對象所在類的構造函數(shù)創(chuàng)建對象,需要的朋友可以參考一下
    2022-01-01
  • Java?hutool?List集合對象拷貝示例代碼

    Java?hutool?List集合對象拷貝示例代碼

    這篇文章主要介紹了Java?hutool?List集合對象拷貝的相關資料,文章還分享了在實現(xiàn)過程中遇到的一些問題,并強調(diào)了閱讀源碼和正確配置CopyOptions的重要性,需要的朋友可以參考下
    2024-12-12
  • Springboot結(jié)合@validated優(yōu)化代碼驗證

    Springboot結(jié)合@validated優(yōu)化代碼驗證

    這篇文章主要介紹了Springboot與@validated注解結(jié)合從而實現(xiàn)讓你的代碼驗證更清爽,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Java程序中的延遲加載功能使用

    Java程序中的延遲加載功能使用

    這篇文章主要介紹了Java程序中的延遲加載功能使用,一定程度上有助于提升性能和降低內(nèi)存使用率,需要的朋友可以參考下
    2015-07-07
  • java面向?qū)ο笤O計原則之迪米特法則分析詳解

    java面向?qū)ο笤O計原則之迪米特法則分析詳解

    這篇文章主要為大家介紹了java面向?qū)ο笤O計原則之迪米特法則的示例分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,學有所得
    2021-10-10
  • 淺析Alibaba Nacos注冊中心源碼剖析

    淺析Alibaba Nacos注冊中心源碼剖析

    這篇文章主要介紹了淺析Alibaba Nacos注冊中心源碼剖析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • Java圖片上傳實現(xiàn)代碼

    Java圖片上傳實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了Java圖片上傳實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • String.join()方法示例詳解

    String.join()方法示例詳解

    String.join() 方法是連接指定數(shù)組的元素或集合的成員,在每個元素或成員之間使用指定的分隔符,這篇文章主要介紹了String.join()方法示例詳解,需要的朋友可以參考下
    2024-01-01
  • sharding-jdbc中的事務詳細解讀

    sharding-jdbc中的事務詳細解讀

    這篇文章主要介紹了sharding-jdbc中的事務詳細解讀,sharding-jdbc在分庫分表方面提供了很大的便利性,在使用DB的時候,通常都會涉及到事務這個概念,而在分庫分表的環(huán)境上再加上事務,就會使事情變得復雜起來,需要的朋友可以參考下
    2023-12-12

最新評論

镇巴县| 榕江县| 泸定县| 五常市| 永安市| 乐亭县| 莱阳市| 扶绥县| 化隆| 双桥区| 太仆寺旗| 尼玛县| 江门市| 石门县| 炉霍县| 昂仁县| 会东县| 呼和浩特市| 永和县| 诸城市| 南康市| 平陆县| 汝城县| 崇州市| 华亭县| 南丰县| 郁南县| 巴楚县| 岳普湖县| 若羌县| 天津市| 微博| 饶河县| 抚州市| 德令哈市| 崇信县| 白朗县| 东至县| 广灵县| 逊克县| 南乐县|