udpsocket編程java
ds.receive(dp);
放到while循環里,檢查到有了數配指鬧據就跳逗碧出培罩來,根據buffer有沒有被填充
B. 我要一份用java網路編程寫的點對點的兩人聊天程序(TCP和UDP)
Server端:
import java.io.*;
import java.net.*;
import java.applet.Applet;
public class TalkServer{
public static void main(String args[]) {
try{
ServerSocket server=null;
try{
server=new ServerSocket(4700);
}catch(Exception e) {
System.out.println("can not listen to:"+e);
}
Socket socket=null;
try{
socket=server.accept();
}catch(Exception e) {
System.out.println("Error."+e);
}
String line;
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter os=new PrintWriter(socket.getOutputStream());
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Client:"+is.readLine());
line=sin.readLine();
while(!line.equals("bye")){
os.println(line);
os.flush();
System.out.println("Server:"+line);
System.out.println("Client:"+is.readLine());
line=sin.readLine();
}
os.close();
is.close();
socket.close();
server.close();
}catch(Exception e){
System.out.println("Error:"+e);
}
}
}
Client端:
import java.io.*;
import java.net.*;
public class TalkClient {
public static void main(String args[]) {
try{
Socket socket=new Socket("127.0.0.1",4700);
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
PrintWriter os=new PrintWriter(socket.getOutputStream());
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readline;
readline=sin.readLine(); //從系統標准輸入讀入一字元串
while(!readline.equals("bye")){
os.println(readline);
os.flush();
System.out.println("Client:"+readline);
System.out.println("Server:"+is.readLine());
readline=sin.readLine(); //從系統標准輸入讀入一字元串
}
os.close(); //關閉Socket輸出流
is.close(); //關閉Socket輸入流
socket.close(); //關閉Socket
}catch(Exception e) {
System.out.println("Error"+e); //出錯,則列印出錯信息
}
}
}
C. java中的socket編程是作什麼的
Socket,又稱為套接字,Socket是計算機網路派枝通信的基本的技術之一。如今大多數基於網路的軟體,如瀏覽器,即時通訊工具甚至是P2P下載都是基於Socket實現的。本文仿羨慧會介紹一下基於TCP/IP的Socket編程,並且如何寫一個客戶端/伺服器程序。
方法/步驟
Java中的socket編程 下面的部分將通過一些示例講解一下如何使用socket編寫客戶端和伺服器端的程序。 注意:在接下來的示例中,我將使用基於TCP/IP協議的socket編程,因為這個協議遠遠比UDP/IP使用的要廣泛。並且所有的socket相關的類都位於java.net包備答下,所以在我們進行socket編程時需要引入這個包。
寫入數據 接下來就是寫入請求數據,我們從客戶端的socket對象中得到OutputStream對象,然後寫入數據後。很類似文件IO的處理代碼。
打開伺服器端的socket
讀取數據 通過上面得到的socket對象獲取InputStream對象,然後安裝文件IO一樣讀取數據即可。這里我們將內容列印出來。
使用socket實現一個回聲伺服器,就是伺服器會將客戶端發送過來的數據傳回給客戶端。
D. java Socket通信原理
具體如下:
首先socket 通信是基於TCP/IP 網路層上的一種傳送方式,我們通常把TCP和UDP稱為傳輸層。其中UDP是一種面向無連接的傳輸層協議。UDP不關心對端是否真正收到了傳送過去的數據。
如果需要檢查對端是否收到分組數據包,或者對端是否連接到網路,則需要在應用程序中實現。UDP常用在分組數據較少或多播、廣播通信以及視頻通信等多媒體領域。
在這里我們不進行詳細討論,這里主要講解的是基於TCP/IP協議下的socket通信。
socket是基於應用服務與TCP/IP通信之間的一個抽象,他將TCP/IP協議裡面復雜的通信邏輯進行分裝。
服務端初始化ServerSocket,然後對指定的埠進行綁定,接著對埠及進行監聽,通過調用accept方法阻塞。
此時,如果客戶端有一個socket連接到服務端,那麼服務端通過監聽和accept方法可以與客戶端進行連接。
Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。
Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程。
Java具有簡單性、面向對象、分布式、健壯性、安全性、平台獨立與可移植性、多線程、動態性等特點。Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等。
E. 在javasocket網路編程中,開發基於udp協議的程序使用的套接字有哪些
一、 填空題
___ IP地址____用來標志網路中的一個通信實體的地址。通信實體可以是計算機,路由器等。
統一資源定位符URL是指向互聯網「資源」的指針,由4部分組成:協議、存放資源的主機域名、__埠___和資源路徑和文件名。
URL 是統一資源定位器的簡稱,它表示Internet上某一資源的地址。
在Socket編程中,IP地址用來標志一台計算機,但是一台計算機上可能提供多種應用程序,使用 埠 來區分這些應用程序。
在Java Socket網路編程中,開發基於TCP協議的伺服器端程序使用的套接字是 ServerSocket 。
在Java Socket網路編程中,開發基於UDP協議的程序使用的套接字是 DatagramSocket 。
二、 選擇題
1.以下協議都屬於TCP/IP協議棧,其中位於傳輸層的協議是(AD)。(選擇二項)
A TCP
B.HTTP
C.SMTP
D.UDP
2.以下協議中屬於TCP/IP協議棧中應用層協議的是(A)。(選擇一項)
A HTTP
B.TCP
C.UDP
D.IP
3.以下說法中關於UDP協議的說法正確的是(AD)。(選擇二項)
A.發送不管對方是否准備好,接收方收到也不確認
B.面向連接
C.佔用系統資源多、效率低
D.非常簡單的協議,可以廣播發送
4.在基於TCP網路通信模式中,客戶與伺服器程序的主要任務是(BC)。(選擇二項)
A 客戶程序在網路上找到一條到達伺服器的路由
B.客戶程序發送請求,並接收伺服器的響應
C.伺服器程序接收並處理客戶請求,然後向客戶發送響應結果
D.如果客戶程序和伺服器都會保證發送的數據不會在傳輸途中丟失
5.在Java網路編程中,使用客戶端套接字Socket創建對象時,需要指定(A)。(選擇一項)
A 伺服器主機名稱和埠
B.伺服器埠和文件
C.伺服器名稱和文件
D.伺服器地址和文件
6.ServerSocket的監聽方法accept( )方法的返回值類型是(A )。(選擇一項)
A.Socket
B.Void
C.Object
D.DatagramSocket
7.Java UDP Socket編程主要用到的兩個類是(BD)。(選擇二項)
A UDPSocket
B.DatagramSocket
C.UDPPacket
D.DatagramPacket
8.在使用UDP套接字通信時,常用(D)類把要發送的信息打包。(選擇一項)
A String
B.DatagramSocket
C.MulticastSocket
D.DatagramPacket
三、 判斷題
1. Socket是傳輸層供給應用層的編程介面,是應用層與傳輸層之間的橋梁 。( T )
2. TCP/IP傳輸控制協議是Internet的主要協議,定義了計算機和外設進行通信的規則。TCP/IP網路參考模型包括七個層次:應用層、會話層、表示層、傳輸層、網路層、鏈路層和物理層。( F )
3. TCP協議一種面向連接的、可靠的、基於位元組流的通信協議 。HTTP、ftp、TELNET、SMTP 都是基於TCP協議的應用層協議。( T )
4. UDP協議是一種面向無連接的、可靠的、基於位元組流的傳輸層通信協議,該協議佔用系統資源多、效率較低。( F )
四、 簡答題
1.TCP/IP協議棧中,TCP協議和UDP協議的聯系和區別?
2.簡述基於TCP的Socket編程的主要步驟。提示:分別說明伺服器端和客戶端的編程步驟。
3.簡述基於UDP的Socket編程的主要步驟。提示:分別說明伺服器端和客戶端的編程步驟。
五、 編碼題
1.使用基於TCP的Java Socket編程,完成如下功能:
1) 要求從客戶端錄入幾個字元,發送到伺服器端。
2) 由伺服器端將接收到的字元進行輸出。
3) 伺服器端向客戶端發出「您的信息已收到」作為響應。
4) 客戶端接收伺服器端的響應信息。
提示:
伺服器端:PrintWriter out =new PrintWriter(socket.getOutputStream(),true);
客戶端:BufferedReader line=new BufferedReader(new InputStreamReader(System.in));
F. 利用UDP Sockets技術實現IP多點傳送
摘要 本文介紹了UDP Sockets的基本概念和IP多點傳送的原理 詳細討論了Java中的相關類及使用方法 提供了一個IP多點傳送的開發流程 關鍵詞 JavaUDP Sockets一 IP多點傳送 IP多點傳送(multicast delivery)是針對點到點的傳送和廣播傳送兩種方式而言的 它是指在一定的組內對其成員進行的廣播 是一種有限的廣播 組中的某個成員發出的信息 組中的其它所有成員都能收到 它是UDP Sockets的一個分支 IP多點傳送特別適合與高帶寬的應用 例如在網路上發送視頻和音頻 隨著網路帶寬的不斷提高和網路通訊質量的不斷改善 IP多點傳送還將廣泛地被應用於網上聊天及網上會議 分布式數據存儲 聯機事務處理 互動式游戲等方面 另外 多點傳送還可以被客戶機用於在網路上尋找相應的伺服器 客戶機發送一個多點傳送的拍攜請求 任何監聽伺服器都可以與客戶機叢銷連接並開始一個事務
二 UDP Socket基礎 使用用戶數據報協議(User Datagram Protocol 簡稱UDP)進行會話必須將信息裝配成一定尺寸的小報文 當發送一條信息 接收方能否收到並返回信息永遠是不確定的 如果無法收到返回信息 我們就無法確定我們發送的信息是否被接收——它可能在途中丟失 接收者返回的響應信息也可能丟失 另外 接收者也可能忽略我們的信息 因此 UDP被描述為不可靠的 無連接的和面向消息的 創建UDP sockets非常象創建一個郵箱 郵箱是使用地址來識別的 但是 我們不需要為每個發送信息的人構造一個新的郵箱 可以在含有發送信息的明信片上寫上目的地址 將其放在郵箱中並發送出去 接收者可能會長久的等待 直到含有信息的明信片到達它的郵箱 而明信片上標識了發送者的返回地址
三 IP多點傳送的原理 為了支持IP多點傳送 某些范圍的IP地址被單獨留出專門用於這個目的 這些IP地址是D類地址 其地址的最高四比特的位模式為 即IP地址的范圍在 和 之間 它們中的每一個IP地址都可以被引用作為一個多點傳送組 任何以該IP地址編址的IP報文將被該組中的其它所有機器接收 也就是說 一個IP地址就襲鄭伏相當於一個郵箱 另外 組中的成員是動態的並隨時間而改變 對於IP多點傳送 網間網組管理協議(Internet Group Management Protocol 簡稱IGMP) 用於管理多點傳送組中的成員 支持多點傳送的路由可以使用IGMP決定本地的機器是否贊成加入某個組 一個多點傳送路由可以決定是否轉發一個多點傳送報文 影響多點傳送報文的一個重要參數是time-to-live(TTL) TTL用於描述發送者希望傳送的信息能通過多少不同的網路 當報文被路由器轉發 報文中的TTL將減一 當TTL為零時 報文將不再向前發送 在實際使用中 我們必須注意下面幾點 這些IP地址只能作為信宿地址使用 絕對不能出現在任何信源地址域中 也不能出現在源路徑或記錄路徑選項中 由於IP多點傳送是一對多的傳送 因此 不能利用差錯與控制報文協議(Internet Control Message Protocol 簡稱ICMP)產生出錯報文 發送一個信息到一個組 發送主機可以不是組中的成員 一些組被Internet Assigned Numbers Authority(IANA)分配 保留用於特殊的目的 詳情參見 ftp://ftp internic net/rfc/rfc txt 另外 避免使用一些保留組 從 到 僅限於本地子網使用 建議在 和 之間任意選取一個IP地址 如果我們選取的組已經被使用 與其他機器的通訊將會混亂 一旦發生 可以退出應用 試試其他的地址 當一個機器加入一個多點傳送組 它將開始接收該IP多點傳送地址的信息 如果多點傳送報文分發到網路上 任何監聽該信息的機器都會有機會接收它 對於IP多點傳送 沒有一個機制對相同網路上的機器能否加入該多點傳送組加以限制 因此 安全性是我們必須考慮的問題之一 選擇的TTL參數應盡可能小 一個大的TTL值會不必要地佔用Internet帶寬 此外 還可能破壞不同區域使用相同組的其它的多點傳送通訊
四 Java中與IP多點傳送相關的類 java net包中含有UDP通訊所需要的工具 其中包括IP多點傳送
1 DatagramPacket類 我們可以使用DatagramPacket類創建一個用於發送的數據報 而當接收UDP數據報時 可以使用DatagramPacket類讀取數據報中的數據 發送者及其它信息 為了創建一個數據報並發送到遠地系統 可以使用下面的構造器 Public DatagramPacket(byte ibuf int length InetAddress iaddr int iport ); ibuf是編碼信息數據的位元組數組 它的長度length就是數據報放在其中的位元組數組的長度 iaddr是一個InetAddress對象 存儲著接收方的主機名和IP地址等信息 iport標識數據報發送到接收主機的埠 為了接收數據報 必須使用DatagramPacket構造器 其原型為 public DatagramPacket(byte ibuf int ilength);ibuf是指接收的數據報的數據部分 ilength是該部分數據的長度 如果 ilength 小於機器接收的UDP數據報的尺寸 多餘的位元組將被Java忽略 另外 類中有一些方法(method)可以讓我們得到一些相關的信息 public int getLength();//得到數據報中數據塊的位元組尺寸 public bytegetData();//得到接收數據報中的數據 public InetAddress getAddress();//為發送者提供一個 InetAddress對象 public int getPort();//得到UDP埠 值得注意的是 TCP sockets的編程中 我們無須將傳送的數據分塊 然而 當我們創建一個基於UDP的網路通訊應用程序時 必須創建一套方法 在運行時刻決定需分割的數據報的長度 對於TCP/IP 最大的數據報可以含有 位元組的數據 然而 主機僅能接收最多 位元組的數據 支持 位元組的大數據報的平台是利用IP層對數據報進行分割的 如果在傳送期間 任何含有IP報文的一個數據塊丟失 都會造成整個UDP數據報的丟失 因此 我們在確定應用中數據報尺寸時 對其尺寸的合理性一定要謹慎 下面就是分割數據的一個例子 //循環地從輸入流input中讀一行數據 while((nextLine=input readLine())!=null){ //定義一個空數據報 其尺寸為 mcastBuffer=new byte[ ]; //如果讀入的數據的長度大於定義的數據報的長度 //則使用定義的長度 否則使用讀入數據的長度 if(nextLine length()>mcastBuffer length){ sendLength=mcastBuffer length; }else { sendLenth=nextLine length(); } //將讀入的數據轉換為byte類型 lineData=nextLine getBytes(); //將數據復制到用於創建數據報的byte數組 for(int i= ;i mcastBuffer[i]=lineData[i]; } ……創建數據報 發送或接收…… }
2 MulticastSocket類 Java的 MulticastSocket類是實施IP多點傳送網路特徵的關鍵 它允許我們使用多點傳送IP發送或接收UDP數據報 MulticastSocket的構造器為 public MulticastSocket () throws IOException;//創建一個多點傳送socket public MulticastSocket(int port)throws IOException;//在指定埠創建一個多點傳送socket 另外 類中其它常用的方法有 public void joinGroup(InetAddress mcastaddr)throws IOException{} //加入多點傳送組 public void leaveGroup(InetAddress mcastaddr)throws IOException{} //離開多點傳送組 public synchronized void send(DatagramPacket p byte ttl) throws IOException{}//發送數據報 public synchronized void receive(DatagramPacket p byte ttl) throws IOException{} //接收數據報 創建一個DatagramPacket對象之後 我們必須相應地創建一個 MulticastSocket對象 這樣 數據報就可以使用send()方法發送了 下面的代碼演示了如何創建 MulticastSocket 發送和接收IP多點傳送數據報 int multiPort= ;//定義埠號 非超級用戶應使用 以上的埠 int ttl= ; //設定TTL值 InetAddress multiAddr=InetAddress getByName(″ ″) //設定多點傳送IP byteSmultiBytes={ H e O }; //定義一個內容為 Hello 的數據報 //創建多點傳送數據報 DatagramPacket SmultiDatagram new Datagram Packet(SmultiBytes SmultiBytes length multiAddr multiPort); MulticastSocket multiSocket=new MulticastSocket(); //創建多點傳送socket multiSocket send(SmultiDatagram ttl) //發送數據報(不加入到組中) …… byteRmultiBytes=new byte[ ];//定義一個空數據報 長度為 位元組 //創建接收數據報 DatagramPacket RmultiDatagram=new DatagramPacket(RmultiBytes RmultiBytes length); multiSocket joinGroup(multiAddr);//加入到多點傳送組中 multiSocket receive(RmultiDatagram);//接收UDP數據報
…… multiSocket leaveGroup(multiAddr);//離開多點傳送組 multiSocket close(); //關閉多點傳送 socket 當調用joinGroup()方法時 機器將關注沿著網路傳送屬於特定多點傳送組的任何IP報文 也就是說 機器擁有了一個郵箱 主機還應使用IGMP相應地報告組的使用 對於多IP地址的機器 應配置數據報發送的介面 setInterface(oneOfMyLocalAddrs); 在DatagramSocket中沒有類似 setSo Timeout()的方法設置超時
五 IP多點傳送應用程序的開發流程 由於IP多點傳送主要用於同組中成員的交流 因此 應用程序的開發流程大體如下 創建一個需發送的按規定編址的數據報DatagramPacket; 建立一個用於發送和接收的MulticastSocket; 加入一個多點傳送組 將數據報放入MulticastSocket中傳送出去 等待從MulticastSocket接收數據報 解碼數據報提取信息 根據得到的信息作出回應 重復 — 步 離開該多點傳送組 關閉MulticastSocket
lishixin/Article/program/Java/hx/201311/27230
G. 在javasocket網路編程中,開發基於udp協議的程序使用的套接字有哪些
Socket套接字,是由系統提供用於網路通信的技術(操作系統給應用程序提供的一組API叫做Socket API),是基於TCP/IP協議的網路通信的基本操作單元。基於Socket套接字的網路程序開發就是網路編程。
socket可以視為是應用層和傳輸層之間的通信橋梁;
傳輸層的核心協議有兩種:TCP,UDP;socket API也有對應的兩組,由於TCP和UDP協議差別很大,因此,這兩組API差別也挺大。
分類:
Socket套接字主要針對傳輸層協議劃分為如下三類:
流套接字:使用傳輸層TCP協議
TCP,即Transmission Control Protocol(傳輸控制協議),傳輸層協議;
TCP的特點:
有連接:像打電話,得先接通,才能交互數據;
可靠傳輸:傳輸過程中,發送方知道接收方有沒有收到數據.(打電話就是可靠傳輸);
面向位元組流:以位元組為單位進行傳輸.(非常類似於文件操作中的位元組流);
全雙工:一條鏈路,雙向通信;
有接收緩沖區,也有發送緩沖區。
大小不限
對於位元組流來說,可以簡單的理解為,傳輸數據是基於IO流,流式數據的特徵就是在IO流沒有關閉的情況下,是無邊界的數據,可以多次發送,也可以分開多次接收。
數據報套接字:使用傳輸層UDP協議
UDP,即User Datagram Protocol(用戶數據報協議),傳輸層耐侍圓協議。
UDP的特點:
無連接:像發微信,不需要接通,直接就能發數據;
不可靠傳輸:傳輸過程中,發送方不知道接收方有沒有收到數據.(發微信就是不可靠傳輸);
面向數據報:以數據報為單位進行傳輸(一個數據報都會明確大小)一次發送/接收必須是一個完整的數據報,不能是半個,也不能是一個半;
全雙工:一條鏈路,雙向通信;
有接收緩沖區,無發送緩沖區;
大小受限:一次最多傳輸64k;
對於數據報來說,可以簡單的理解為,傳輸數據是一塊一塊的,發送一塊數據假如100個位元組,必須一次發送,接收也必須一次接收100個位元組,談州而不能分100次,每次接收1個位元組。
原始套接字
原始套接字用於自定義傳輸層協議,用於讀寫內核沒有處理的IP協議數據。
二、UDP數據報套接字編程
UDPSocket中,主要涉及到兩類:DatagramSocket、DatagramPacket;
DatagramSocket API
DatagramSocket 創建了一個UDP版本的Socket對象,用於發送和接收UDP數據報,代表著操作系統中的一個socket文件,(操作系統實現的功能–>)代表著網卡硬體設備的抽象體現。
DatagramSocket 構造方法:
方法簽名 方法說明
DatagramSocket() 創建一個UDP數據報套接字的Socket,綁定到本機任意一個隨機埠(一般用於客戶端)
DatagramSocket(int port) 創建一個UDP數據報套接字的Socket,綁定到本機指定的埠(一般用於服務端)
DatagramSocket 方法:
方法簽名 方法說明
void receive(DatagramPacket p) 從此套接字接收數據報(如果沒有接收到數據報,該方法昌塌會阻塞等待)
void send(DatagramPacket p) 從此套接字發送數據報包(不會阻塞等待,直接發送)
void close() 關閉此數據報套接字
DatagramPacket API
代表了一個UDP數據報,是UDP Socket發送和接收的數據報,每次發送/接收數據報,都是在傳輸一個DatagramPacket對象。
DatagramPacket 構造方法:
方法簽名 方法說明
DatagramPacket(byte[] buf, int length) 構造一個DatagramPacket以用來接收數據報,接收的數據保存在位元組數組(第一個參數buf)中,接收指定長度(第二個參數length)
DatagramPacket(byte[] buf, int offset, int length,SocketAddress address) 構造一個DatagramPacket以用來發送數據報,發送的數據為位元組數組(第一個參數buf)中,從0到指定長度(第二個參數length)。address指定目的主機的IP和埠號
DatagramPacket 方法:
方法簽名 方法說明
InetAddress getAddress() 從接收的數據報中,獲取發送端主機IP地址;或從發送的數據報中,獲取接收端主機IP地址
int getPort() 從接收的數據報中,獲取發送端主機的埠號;或從發送的數據報中,獲取接收端主機埠號
byte[] getData() 獲取數據報中的數據
構造UDP發送的數據報時,需要傳入 SocketAddress ,該對象可以使用 InetSocketAddress 來創建。
InetSocketAddress API
InetSocketAddress ( SocketAddress 的子類 )構造方法:
方法簽名 方法說明
InetSocketAddress(InetAddress addr, int port) 創建一個Socket地址,包含IP地址和埠號
示例1:寫一個簡單的客戶端服務程序,回顯服務(EchoSever)
在這里插入圖片描述
構建Socket對象有很多失敗的可能:
埠號已經被佔用,同一個主機的兩個程序不能有相同的埠號(這就好比兩個人不能擁有相同的電話號碼);
此處,多個進程不能綁定同一個埠號,但是一個進程可以綁定多個埠,(這就好比一個人可以擁有多個手機號),一個進程可以創建多個Socket對象,每個Socket都綁定自己的埠。
每個進程能夠打開的文件個數是有上限的,如果進程之間已經打開了很多文件,就可能導致此時的Socket文件不能順利打開;
在這里插入圖片描述
這個長度不一定是1024,假設這里的UDP數據最長是1024,實際的數據可能不夠1024.
在這里插入圖片描述
這里的參數不再是一個空的位元組數組了,response是剛才根據請求計算的得到的響應,是非空的,DatagramPacket 裡面的數據就是String response的數據。
response.getBytes().length:這里拿到的是位元組數組的長度(位元組的個數),而response.length得到的是字元的長度。
五元組
一次通信是由5個核心信息描述的:源IP、 源埠、 目的IP、 目的埠、 協議類型。
站在客戶端角度:
源IP:本機IP;
源埠:系統分配的埠;
目的IP:伺服器的IP;
目的埠:伺服器的埠;
協議類型:TCP;
站在伺服器的角度:
源IP:伺服器程序本機的IP;
源埠:伺服器綁定的埠(此處手動指定了9090);
目的IP:包含在收到的數據報中(客戶端的IP);
目的埠:包含在收到的數據報中(客戶端的埠);
協議類型:UDP;
H. Java語言應用中實現UDP協議編程的方法
//州高亂發送端SocketSendFile.java
import java.io.*;
import java.net.*;
public class SocketSendFile {
public static final int SER_PORT=666;
public static final int CLI_PORT=8484;
public static final String SER_IP="192.168.0.35";
public static int bufSize = 1024;
public static byte] mess = new bytebufSize];
//建立Socket引用
public static DatagramSocket dp;
public static void main(String] args) throws Exception {
dp = new DatagramSocket(SER_PORT);
//調用構造函數SocketSendFile,並傳遞參數args0](所要傳輸念沖的文件名)
SocketSendFile(args0]);
}
public static void SocketSendFile(String file2) throws Exception {
//冊檔定義一個計數器
int pos =0;
//設置寫入流
FileInputStream fis = new FileInputStream(file2);
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
int i;
do {
i = dis.read();
int j=0;
while (j<1024 & i != -1) {
messpos++] = (byte) i;
i=dis.read();
j++;
}
dp.send(new DatagramPacket(mess,pos,InetAddress.getByName(SER_IP),CLI_PORT));
}
while (i != -1);
fis.close();
}
}
//接收端SocketReceiveFile.java
import java.net.*;
import java.io.*;
public class SocketReceiveFile {
public static int bufSize=1024;
public static byte] mess=new bytebufSize];
public static DatagramSocket dp;
public static final int SER_PORT=8484;
public static void main(String] args) throws Exception {
dp = new DatagramSocket(SER_PORT);
SocketReceiveFile(args0]);
}
public static void SocketReceiveFile(String file1) throws Exception {
FileOutputStream fos = new FileOutputStream(file1);
BufferedOutputStream bos = new BufferedOutputStream(fos);
DataOutputStream dos = new DataOutputStream(bos);
int i;
DatagramPacket p = new DatagramPacket(mess,mess.length);
while(true) {
boolean j=false;
while (p.getData().length != 0) {
dos.write(p.getData());
dp.receive(p);
j=true;
}
// System.out.println(new String(p.getData(),0,p.getLength()));
if (j)
System.out.println("文件傳送完畢.");
}
// fos.close();
}
}
I. Java socket UDP 編程 為什麼一台電腦間可以通信,client,server,router在不同電腦上不好使。router只是
首先確定鏈接IP和埠的正確性
然後確定server router再監聽對應的UDP埠,還有確保兩台機器之間的防火牆沒有屏蔽對應UDP埠,這樣的話應該可以能夠使client鏈接到server或者router的