導航:首頁 > 編程語言 > javasocket推送

javasocket推送

發布時間:2022-11-21 02:46:26

java SOCKET傳送數據

可以這樣哈,數據結構:
|--時間(50個位元組)--||--上午數據長度(固定用8個位元組)--||--上午數據--||--中午數據長度--||--中午數據--||--下午數據長度--||--下午數據--|

然後讀取的時候先讀50個位元組的內容,然後把它轉為字元串得到的就是時間,然後讀8個位元組的內容,把讀到的內容轉為數字就是上午的數據的總長度,假如是n,則繼續讀n個位元組內容,轉為字元串就是上午數據,然後繼續讀8個位元組,轉為數字……
以上只是一種數據結構,還可以有很多,你可以根據自己的實際情況來決定各個位元組的長度。

再說寫入的情況,把所有的字元串轉化成固定長度的byte數組然後直接寫入就行了。
byte[] time=new byte[10];
String stime="2009-10-31 12:00:00";
byte[] temp=stime.getByte();
for(int i=0;i<temp.length;i++){
time[i]=temp[i];
}
然後寫入time,等到把所有數據寫入完畢統一刷新

❷ socket如何單獨推送消息

Socket又稱"套接字",應用程序通常通過"套接字"向網路發出請求或者應答網路請求。Socket的英文原義是「孔」或「插座」,作為UNIX的進程通信機制。Socket可以實現應用程序間網路通信。
消息推送:
輪詢:客戶端定時向伺服器發送Ajax請求,伺服器接到請求後馬上返回響應信息並關閉連接。
長輪詢:客戶端向伺服器發送Ajax請求,伺服器接到請求後hold住連接,直到有新消息才返回響應信息並關閉連接,客戶端處理完響應信息後再向伺服器發送新的請求。 ?優點:在無消息的情況下不會頻繁的請求,耗費資小。
長連接:在頁面里嵌入一個隱蔵iframe,將這個隱蔵iframe的src屬性設為對一個長連接的請求或是採用xhr請求,伺服器端就能源源不斷地往客戶端輸入數據。
Flash Socket:在頁面中內嵌入一個使用了Socket類的 Flash 程序JavaScript通過調用此Flash程序提供的Socket介面與伺服器端的Socket介面進行通信,JavaScript在收到伺服器端傳送的信息後控制頁面的顯示。 Websocket:
WebSocket是HTML5開始提供的一種瀏覽器與伺服器間進行全雙工通訊的網路技術。依靠這種技術可以實現客戶端和伺服器端的長連接,雙向實時通信。
消息推送功能可以說移動APP不可缺少的功能之一,一般簡單的推送可以使用第三方推送的SDK,比如極光推送。極光是中國領先的移動大數據服務商。本公司自2011年成立以來專注於為app開發者提供穩定高效的消息推送、統計分析、即時通訊和簡訊等開發者服務。

❸ java socket 怎麼給websocket發信息

1.InitServlet

該類主要是用來初始化構造將來存儲用戶身份信息的map倉庫,利用其初始化方法Init 初始化倉庫, 利用其靜態方法getSocketList 獲得對應的用戶身份信息。

webSocket ,我認為MessageInbound 用來識別登錄人的信息,用它來找到對應的人,推送消息。每次登錄都會產生一個MessageInbound。

這里的HashMap<String,MessageInbound> :string 存儲用戶session的登錄id,MessageInbound存儲 推送需要的身份信息。以上屬於個人口頭話理解。

packagesocket;

importjava.nio.CharBuffer;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;

importjavax.servlet.ServletConfig;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;

importorg.apache.catalina.websocket.MessageInbound;

{

=-3163557381361759907L;

//privatestaticList<MessageInbound>socketList;
privatestaticHashMap<String,MessageInbound>socketList;

publicvoidinit(ServletConfigconfig)throwsServletException{
//InitServlet.socketList=newArrayList<MessageInbound>();
InitServlet.socketList=newHashMap<String,MessageInbound>();
super.init(config);
System.out.println("Serverstart============");
}

publicstaticHashMap<String,MessageInbound>getSocketList(){
returnInitServlet.socketList;
}
/*publicstaticList<MessageInbound>getSocketList(){
returnInitServlet.socketList;
}
*/}

2.MyWebSocketServlet

websocket用來建立連接的servlet,建立連接時,首先在session獲取該登錄人的userId,在調用MyMessageInbound構造函數傳入userId

packagesocket;

importjava.io.IOException;
importjava.io.PrintWriter;
importjava.nio.CharBuffer;

importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;

importorg.apache.catalina.websocket.StreamInbound;
importorg.apache.catalina.websocket.WebSocketServlet;
/**
*
*@ClassName:MyWebSocketServlet
*@Description:建立連接時創立
*@authormangues
*@date2015-7-19
*/
{

publicStringgetUser(HttpServletRequestrequest){
StringuserName=(String)request.getSession().getAttribute("user");
if(userName==null){
returnnull;
}
returnuserName;
//return(String)request.getAttribute("user");
}
@Override
(Stringarg0,
HttpServletRequestrequest){
System.out.println("##########");
returnnewMyMessageInbound(this.getUser(request));
}

}

3.onOpen方法調用InitServlet的map身份倉庫,

放入用戶userId 和 對應該登錄用戶的websocket身份信息MessageInbound (可以用userId來尋找到推送需要的 身份MessageInbound)

onTextMessage :用來獲取消息,並發送消息

packagesocket;

importjava.io.IOException;
importjava.nio.ByteBuffer;
importjava.nio.CharBuffer;
importjava.util.HashMap;

importorg.apache.catalina.websocket.MessageInbound;
importorg.apache.catalina.websocket.WsOutbound;

importutil.MessageUtil;

{

privateStringname;
publicMyMessageInbound(){
super();
}

publicMyMessageInbound(Stringname){
super();
this.name=name;
}

@Override
protectedvoidonBinaryMessage(ByteBufferarg0)throwsIOException{
//TODOAuto-generatedmethodstub

}

@Override
protectedvoidonTextMessage(CharBuffermsg)throwsIOException{
//用戶所發消息處理後的map
HashMap<String,String>messageMap=MessageUtil.getMessage(msg);//處理消息類
//上線用戶集合類map
HashMap<String,MessageInbound>userMsgMap=InitServlet.getSocketList();

StringfromName=messageMap.get("fromName");//消息來自人的userId


StringtoName=messageMap.get("toName");//消息發往人的userId
//獲取該用戶
MessageInboundmessageInbound=userMsgMap.get(toName);//在倉庫中取出發往人的MessageInboundif(messageInbound!=null){//如果發往人存在進行操作
WsOutboundoutbound=messageInbound.getWsOutbound();


Stringcontent=messageMap.get("content");//獲取消息內容
StringmsgContentString=fromName+""+content;//構造發送的消息

//發出去內容
CharBuffertoMsg=CharBuffer.wrap(msgContentString.toCharArray());
outbound.writeTextMessage(toMsg);//
outbound.flush();
}/*for(MessageInboundmessageInbound:InitServlet.getSocketList()){
CharBufferbuffer=CharBuffer.wrap(msg);
WsOutboundoutbound=messageInbound.getWsOutbound();
outbound.writeTextMessage(buffer);
outbound.flush();
}*/

}

@Override
protectedvoidonClose(intstatus){
InitServlet.getSocketList().remove(this);
super.onClose(status);
}

@Override
protectedvoidonOpen(WsOutboundoutbound){
super.onOpen(outbound);
//登錄的用戶注冊進去
if(name!=null){
InitServlet.getSocketList().put(name,this);
}
//InitServlet.getSocketList().add(this);
}


}

4.消息處理類,處理前端發來的消息

packageutil;

importjava.nio.CharBuffer;
importjava.util.HashMap;
/**
*
*@ClassName:MessageUtil
*@Description:消息處理類
*@authormangues
*@date2015-7-19
*/
publicclassMessageUtil{

publicstaticHashMap<String,String>getMessage(CharBuffermsg){
HashMap<String,String>map=newHashMap<String,String>();
StringmsgString=msg.toString();
Stringm[]=msgString.split(",");
map.put("fromName",m[0]);
map.put("toName",m[1]);
map.put("content",m[2]);
returnmap;
}
}

❹ 關於 java socket的消息推送問題

關於 java socket的消息推送問題,首先:開啟服務端,並暴露出埠。然後通過一個while的死循環去不停的接收來自客戶端的socket,並且通過一個ArrayList來維護。並且通過子線程去對list中的socket進行操作。
其次:客戶端去訪問伺服器的埠。開啟一個子線程去不停的接收來自服務端的消息。
然而關於推送服務的更多內容,可以通過深圳極光公司了解一下。深圳市和訊華谷信息技術有限公司(極光 Aurora Mobile)成立於2011年,是中國領先的開發者服務提供商,專注於為開發者提供穩定高效的消息推送、一鍵認證以及流量變現等服務,助力開發者的運營、增長與變現。
同時,極光的行業應用已經拓展至市場洞察、金融風控與商業地理服務,助力各行各業優化決策、提升效率。

❺ Java如何使用socket互相發送對象

getOutputStream(),從連接獲取輸入流對象。 這個對象可以和BufferedOutputStream,OutputStreamWriter等配合使用; 建立BufferedOutputStream對象 BufferedOutputStream br=new BufferedOutputStream(socket.getOutputStream()); 調用BufferedOutputStream對象的,write向流中寫入數據。

❻ java多用戶socket通訊,數據返回給指定用戶

我覺得你是不是要了解下nio或者netty?
應該會有所幫助…服務端綁定埠監聽,每個客戶端去連接都是一個socket,服務端使用selector分發客戶端請求並處理。
基本使用netty就好了…

❼ 安卓/java用Socket實現類似QQ消息推送,程序在後台運行如何一直保持連接伺服器端如何判斷是否斷開連

QQ消息是 UDP包。 你連接後,不關閉就算連接著,服務端沒法判斷是否斷開連接,
只有客戶端 定時發送一個UDP包,表示連接著。

❽ java socket伺服器發送信息給指定的客戶端,在線等

是tcp還是udp啊?socket連接可以指定ip和埠啊,所以服務端即使有N個socket連接都不怕,知道埠就行了

❾ 如何實現java推送消息到app

主要介紹其中的五種實現方式:短輪詢、Comet、Flash XMLSocket、Server-sent、WebSocket
1、短輪詢
指在特定的的時間間隔(如每10秒),由瀏覽器對伺服器發出HTTP request,然後由伺服器返回最新的數據給客戶端的瀏覽器。瀏覽器做處理後進行顯示。無論後端此時是否有新的消息產生,都會進行響應
2、Comet
包括了長輪詢和長連接,長輪詢是客戶端向伺服器發送Ajax請求,伺服器接到請求後hold住連接,直到有新消息才返回響應信息並關閉連接,客戶端處理完響應信息後再向伺服器發送新的請求;長連接是在頁面中的iframe發送請求到服務端,服務端hold住請求並不斷將需要返回前端的數據封裝成調用javascript函數的形式響應到前端,前端不斷收到響應並處理
3、Flash XMLSocket
在 HTML 頁面中內嵌入一個使用了 XMLSocket 類的 Flash 程序。JavaScript 通過調用此 Flash 程序提供的socket介面與伺服器端的socket進行通信。JavaScript 在收到伺服器端以 XML 格式傳送的信息後可以很容易地控制 HTML 頁面的內容顯示
4、Server-sent
伺服器推指的是HTML5規范中提供的服務端事件EventSource,瀏覽器在實現了該規范的前提下創建一個EventSource連接後,便可收到服務端的發送的消息,實現一個單向通信。客戶端進行監聽,並對響應的信息處理顯示
5、WebSocket
WebSocket是HTML5下一種新的協議,是基於TCP的應用層協議,只需要一次連接,便可以實現全雙工通信,客戶端和服務端可以相互主動發送消息。客戶端進行監聽,並對響應的消息處理顯示
針對自己系統的應用場景選擇合適的推送方案才是合理的,因此最後簡單說一下實現個性化推送的兩種方式。第一種很簡單,直接使用第三方實現的推送,無需復雜的開發運維,直接可以使用。第二種就是自己封裝,可以選擇如今較為火熱的WebSocket來實現系統的推送。
關於第三方推送平台,極光推送,操作簡單,穩定性高,送達率快

❿ java socket技術 客戶端實現不發送請求給服務端但是一直接收服務端發來的數據

說點潑冷水的話題
首先確認什麼是客戶端,什麼是服務端。
從用戶的角度,可見的、可操作的即是客戶端,也就是你這里說的java開發的部分。而不可見的部分就是服務端,也就是你說的C部分。
而從網路開發的角度,發起請求的是客戶端,而接收請求的是服務端。這與用戶感受有很大區別。
當從java請求C的時候,java是客戶端,C 是服務端。而當C主動請求時,則C就變成了客戶端,而java 變成了服務端。
所以,從網路開發的角度,java想成為此次通信的服務端,必須長期維護一個埠可用,而C 要訪問這個埠。
而java為了能夠長期維護一個埠,一般採用socket 方式(其他方式也基本上都是基於socket的),由於java已經封裝的很好了,只要new Socket(IP,port) 就可以 獲得,同時,由於原來C 是伺服器,而如果沒有多個伺服器同時向java端發送請求的話,基本連線程處理都不需要做的。

閱讀全文

與javasocket推送相關的資料

熱點內容
下班之後的程序員 瀏覽:69
檢測支持ssl加密演算法 瀏覽:340
衢州發布新聞什麼APP 瀏覽:82
中國移動長沙dns伺服器地址 瀏覽:249
wifi密碼加密了怎麼破解嗎 瀏覽:596
linux命令cpu使用率 瀏覽:67
linux實用命令 瀏覽:238
傳奇引擎修改在線時間命令 瀏覽:109
php取域名中間 瀏覽:897
cad命令欄太小 瀏覽:830
php開發環境搭建eclipse 瀏覽:480
qt文件夾名稱大全 瀏覽:212
金山雲伺服器架構 瀏覽:230
安卓系統筆記本怎麼切換系統 瀏覽:618
u盤加密快2個小時還沒有搞完 瀏覽:93
小米有品商家版app叫什麼 瀏覽:94
行命令調用 瀏覽:436
菜鳥裹裹員用什麼app 瀏覽:273
窮查理寶典pdf下載 瀏覽:515
csgo您已被禁用此伺服器怎麼辦 瀏覽:398