程序客戶端代碼也與此類似 客戶端采用循環不斷地讀取用戶鍵盤輸入 每當讀到用戶輸入內容后就將該內容封裝成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中的接口是一種特殊的類,使用關鍵字interface創建。接口功能完全實現后,可以打成jar包,提供給其他公司使用。
要返回json格式數據,可以把接口中抽象方法的返回值類型規定為JSONObject或JSONString類型。這樣當其他公司調用時,得到的數據就是json數據了。
另外,以jar形式提供的接口,可以通過反編譯得到你的源碼,如果你不希望開源,就要加密了。
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。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯