java寫代碼接收數據 java接收報文

瘋狂Java講義:使用DatagramSocket發送、接收數據[2]

程序客戶端代碼也與此類似 客戶端采用循環不斷地讀取用戶鍵盤輸入 每當讀到用戶輸入內容后就將該內容封裝成DatagramPacket數據報 再將該數據報發送出去 接著把DatagramSocket中的數據讀入接收用的DatagramPacket中(實際上是讀入該DatagramPacket所封裝的字節數組中) 客戶端代碼如下

成都創新互聯自2013年創立以來,是專業互聯網技術服務公司,擁有項目網站設計、網站建設網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元任縣做網站,已為上家服務,為任縣各地企業和個人服務,聯系電話:18980820575

程序清單 codes/ / /UdpClient java

public class UdpClient

{

//定義發送數據報的目的地

public static final int DEST_PORT = ;

public static final String DEST_IP = ;

//定義每個數據報的最大大小為 K

private static final int DATA_LEN = ;

//定義該客戶端使用的DatagramSocket

private DatagramSocket socket = null;

//定義接收網絡數據的字節數組

byte[] inBuff = new byte[DATA_LEN];

//以指定字節數組創建準備接受數據的DatagramPacket對象

private DatagramPacket inPacket =

new DatagramPacket(inBuff inBuff length)

//定義一個用于發送的DatagramPacket對象

private DatagramPacket outPacket = null;

public void init()throws IOException

{

try

{

//創建一個客戶端DatagramSocket 使用隨機端口

socket = new DatagramSocket()

//初始化發送用的DatagramSocket 它包含一個長度為 的字節數組

outPacket = new DatagramPacket(new byte[ ]

InetAddress getByName(DEST_IP) DEST_PORT)

//創建鍵盤輸入流

Scanner scan = new Scanner(System in)

//不斷讀取鍵盤輸入

while(scan hasNextLine())

{

//將鍵盤輸入的一行字符串轉換字節數組

byte[] buff = scan nextLine() getBytes()

//設置發送用的DatagramPacket里的字節數據

outPacket setData(buff)

//發送數據報

socket send(outPacket)

//讀取Socket中的數據 讀到的數據放在inPacket所封裝的字節數組里

socket receive(inPacket)

System out println(new String(inBuff

inPacket getLength()))

}

}

//使用finally塊保證關閉資源

finally

{

if (socket != null)

{

socket close()

}

}

}

public static void main(String[] args)

throws IOException

{

new UdpClient() init()

}

}

上面程序的粗體字代碼同樣也是通過DatagramSocket發送 接收DatagramPacket的關鍵代碼 這些代碼與服務器的代碼基本相似 而客戶端與服務器端的唯一區別在于 服務器所在IP地址 端口是固定的 所以客戶端可以直接將該數據報發送給服務器 而服務器則需要根據接收到的數據報來決定將 反饋 數據報的目的地

讀者可能會發現 使用DatagramSocket進行網絡通信時 服務器端無須 也無法保存每個客戶端的狀態 客戶端把數據報發送到服務器后 完全有可能立即退出 但不管客戶端是否退出 服務器無法知道客戶端的狀態

當使用UDP協議時 如果想讓一個客戶端發送的聊天信息可被轉發到其他所有客戶端則比較困難 可以考慮在服務器使用Set來保存所有客戶端信息 每當接收到一個客戶端的數據報之后 程序檢查該數據報的源SocketAddress是否在Set集合中 如果不在就將該SocketAddress添加到該Set集合中 但這樣一來又涉及一個問題 可能有些客戶端發送一個數據報之后永久性地退出了程序 但服務器端還將該客戶端的SocketAddress保存在Set集合中……總之 這種方式需要處理的問題比較多 編程比較煩瑣 幸好Java為UDP協議提供了MulticastSocket類 通過該類可以輕松實現多點廣播

返回目錄 瘋狂Java講義

編輯推薦

Java程序性能優化 讓你的Java程序更快 更穩定

新手學Java 編程

Java程序設計培訓視頻教程

lishixinzhi/Article/program/Java/hx/201311/27260

java寫一個用于接收json數據的接口

java中的接口是一種特殊的類,使用關鍵字interface創建。接口功能完全實現后,可以打成jar包,提供給其他公司使用。

要返回json格式數據,可以把接口中抽象方法的返回值類型規定為JSONObject或JSONString類型。這樣當其他公司調用時,得到的數據就是json數據了。

另外,以jar形式提供的接口,可以通過反編譯得到你的源碼,如果你不希望開源,就要加密了。

用JAVA寫一個SOCKET 接收TCP發來的消息

public class TalkServer{

public static void main(String args[]) {

try{

ServerSocket server=null;

try{

server=new ServerSocket(4700);

//創建一個ServerSocket在端口4700監聽客戶請求

}catch(Exception e) {

System.out.println("can not listen to:"+e);

//出錯,打印出錯信息

}

Socket socket=null;

try{

socket=server.accept();

//使用accept()阻塞等待客戶請求,有客戶

//請求到來則產生一個Socket對象,并繼續執行

}catch(Exception e) {

System.out.println("Error."+e);

//出錯,打印出錯信息

}

String line;

BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));

 //由Socket對象得到輸入流,并構造相應的BufferedReader對象

PrintWriter os=newPrintWriter(socket.getOutputStream());

 //由Socket對象得到輸出流,并構造PrintWriter對象

BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));

 //由系統標準輸入設備構造BufferedReader對象

System.out.println("Client:"+is.readLine());

//在標準輸出上打印從客戶端讀入的字符串

line=sin.readLine();

//從標準輸入讀入一字符串

while(!line.equals("bye")){

//如果該字符串為 "bye",則停止循環

os.println(line);

//向客戶端輸出該字符串

os.flush();

//刷新輸出流,使Client馬上收到該字符串

System.out.println("Server:"+line);

//在系統標準輸出上打印讀入的字符串

System.out.println("Client:"+is.readLine());

//從Client讀入一字符串,并打印到標準輸出上

line=sin.readLine();

//從系統標準輸入讀入一字符串

}  //繼續循環

os.close(); //關閉Socket輸出流

is.close(); //關閉Socket輸入流

socket.close(); //關閉Socket

server.close(); //關閉ServerSocket

}catch(Exception e){

System.out.println("Error:"+e);

//出錯,打印出錯信息

}

}

}

新聞標題:java寫代碼接收數據 java接收報文
網站地址:http://m.kartarina.com/article48/hgjihp.html

成都網站建設公司_創新互聯,為您提供關鍵詞優化、商城網站微信小程序、響應式網站、軟件開發ChatGPT

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

綿陽服務器托管
主站蜘蛛池模板: 青青草无码免费一二三区| 亚洲AV无码久久| 无码毛片一区二区三区视频免费播放 | 无码人妻精品一区二区三区66| 亚洲VA中文字幕无码一二三区| 欧洲无码一区二区三区在线观看| 无码人妻一区二区三区在线水卜樱| 亚洲AV无码日韩AV无码导航| 永久无码精品三区在线4| 无码专区狠狠躁躁天天躁| 精品一区二区无码AV| 久久久久久亚洲精品无码| 无码少妇一区二区三区浪潮AV| 无码视频在线播放一二三区| 亚洲欧洲国产综合AV无码久久| 国产白丝无码免费视频| 亚洲AV中文无码乱人伦| 色综合色国产热无码一| 亚洲av无码有乱码在线观看| 色窝窝无码一区二区三区| 伊人久久无码中文字幕| 影院无码人妻精品一区二区| 亚洲精品无码专区久久| 99久久国产热无码精品免费| 日韩精品无码熟人妻视频| 一本色道无码道在线观看| 亚洲中文字幕无码专区| 久久久无码精品亚洲日韩软件| 成人免费无码大片a毛片软件 | 免费无码又爽又刺激高潮| 亚洲综合无码无在线观看| 91久久精品无码一区二区毛片| 国产成人精品无码免费看| 国精品无码一区二区三区在线| 国产高新无码在线观看| AV无码小缝喷白浆在线观看| 中文字幕人妻无码系列第三区| 中文字幕乱妇无码AV在线| 无码人妻精品一区二区三区66 | 五月婷婷无码观看| 激情无码人妻又粗又大|