導航:首頁 > 編程語言 > java發送數據包

java發送數據包

發布時間:2022-11-12 06:24:24

『壹』 用java語言如何接收客戶端發送的數據包

不寫代碼,這個要你自己完成的

JAVA提供了關於網路編程相應的API
客戶端--->Socket
服務端-->ServerSocket

1.首先new出服務端對象
new ServerSocket(int port); port為指定接收的埠號
注意,你在new客戶端對象的時候
new Socket(主機名,埠號) 這里的埠號要一致

2.new出服務端對象後,調用accpt()方法,接收客戶端傳遞的數據,返回一個客戶端對象, 這個客戶端對象里有什麼? 當然是你客戶端發送的數據了

3.如何讀取?
客戶端的操作:
客戶端寫出數據至服務端 socket.getOutputStream()
客戶端讀取來自服務端的數據 socket.getInputStream()

服務端的操作;
利用 調用的accpet方法返回的Socket對象
ServerSocket server = new ServerSocket(8080); (假設是8080埠)
Socket socket = server.accpet();
服務端讀取來自客戶端的數據: socket.getInputStream();
服務端向客戶端發送數據: socket.getOutputStream()

一個基本的網路通信模式就這樣生成了

位元組如何以網頁形式顯示? 全是亂碼?
你客服端發送一個.mp3 能顯示出來嗎?

如果你想以網頁顯示的話,那涉及到JavaWeb編程了,servlet/jsp

QQ:170014410 可以探討

『貳』 java怎麼自定義一個數據包並把它發送出去

客戶端代碼
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.InetSocketAddress;
import java.net.Socket;

public class Client {

public static void main(String[] args) {
int length = 0;
byte[] sendBytes = null;
Socket socket = null;
DataOutputStream dos = null;
FileInputStream fis = null;
try {
try {
socket = new Socket();
socket.connect(new InetSocketAddress("192.168.0.104", 3000),
10 * 1000);
dos = new DataOutputStream(socket.getOutputStream());
File file = new File("Moon.zip");
fis = new FileInputStream(file);

sendBytes = new byte[10240];
while ((length = fis.read(sendBytes, 0, sendBytes.length)) > 0) {
dos.write(sendBytes, 0, length);
dos.flush();
}
} finally {
if (dos != null)
dos.close();
if (fis != null)
fis.close();
if (socket != null)
socket.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
//////////////////////////////////////////////////////////
伺服器代
import java.net.*;
import java.io.*;

public class Server implements Runnable {

public static void main(String[] args) {

try {
final ServerSocket server = new ServerSocket(3000);
Thread th = new Thread(new Runnable() {
public void run() {
while (true) {
try {
System.out.println("開始監聽...");
Socket socket = server.accept();
System.out.println("有鏈接");
receiveFile(socket);
} catch (Exception e) {
}
}
}

});

th.run(); //啟動線程運行
} catch (Exception e) {
e.printStackTrace();
}
}

public void run() {
}

public static void receiveFile(Socket socket) {

byte[] inputByte = null;
int length = 0;
DataInputStream dis = null;
FileOutputStream fos = null;
try {
try {

dis = new DataInputStream(socket.getInputStream());
fos = new FileOutputStream(new File("receive.MV"));
inputByte = new byte[1024];
System.out.println("開始接收數據...");
while ((length = dis.read(inputByte, 0, inputByte.length)) > 0) {
System.out.println(length);
fos.write(inputByte, 0, length);
fos.flush();
}
System.out.println("完成接收");
} finally {
if (fos != null)
fos.close();
if (dis != null)
dis.close();
if (socket != null)
socket.close();
}
} catch (Exception e) {

}

}
}

『叄』 如何使用java socket來傳輸自定義的數據包

以下分四點進行描述:

1,什麼是Socket
網路上的兩個程序通過一個雙向的通訊連接實現數據的交換,這個雙向鏈路的一端稱為一個Socket。Socket通常用來實現客戶方和服務方的連接。Socket是TCP/IP協議的一個十分流行的編程界面,一個Socket由一個IP地址和一個埠號唯一確定。
但是,Socket所支持的協議種類也不光TCP/IP一種,因此兩者之間是沒有必然聯系的。在Java環境下,Socket編程主要是指基於TCP/IP協議的網路編程。

2,Socket通訊的過程
Server端Listen(監聽)某個埠是否有連接請求,Client端向Server 端發出Connect(連接)請求,Server端向Client端發回Accept(接受)消息。一個連接就建立起來了。Server端和Client 端都可以通過Send,Write等方法與對方通信。
對於一個功能齊全的Socket,都要包含以下基本結構,其工作過程包含以下四個基本的步驟:
(1) 創建Socket;
(2) 打開連接到Socket的輸入/出流;
(3) 按照一定的協議對Socket進行讀/寫操作;
(4) 關閉Socket.(在實際應用中,並未使用到顯示的close,雖然很多文章都推薦如此,不過在我的程序中,可能因為程序本身比較簡單,要求不高,所以並未造成什麼影響。)

3,創建Socket
創建Socket
java在包java.net中提供了兩個類Socket和ServerSocket,分別用來表示雙向連接的客戶端和服務端。這是兩個封裝得非常好的類,使用很方便。其構造方法如下:
Socket(InetAddress address, int port);
Socket(InetAddress address, int port, boolean stream);
Socket(String host, int prot);
Socket(String host, int prot, boolean stream);
Socket(SocketImpl impl)
Socket(String host, int port, InetAddress localAddr, int localPort)
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
ServerSocket(int port);
ServerSocket(int port, int backlog);
ServerSocket(int port, int backlog, InetAddress bindAddr)
其中address、host和port分別是雙向連接中另一方的IP地址、主機名和端 口號,stream指明socket是流socket還是數據報socket,localPort表示本地主機的埠號,localAddr和 bindAddr是本地機器的地址(ServerSocket的主機地址),impl是socket的父類,既可以用來創建serverSocket又可 以用來創建Socket。count則表示服務端所能支持的最大連接數。例如:學習視頻網 http://www.xxspw.com
Socket client = new Socket("127.0.01.", 80);
ServerSocket server = new ServerSocket(80);
注意,在選擇埠時,必須小心。每一個埠提供一種特定的服務,只有給出正確的埠,才 能獲得相應的服務。0~1023的埠號為系統所保留,例如http服務的埠號為80,telnet服務的埠號為21,ftp服務的埠號為23, 所以我們在選擇埠號時,最好選擇一個大於1023的數以防止發生沖突。
在創建socket時如果發生錯誤,將產生IOException,在程序中必須對之作出處理。所以在創建Socket或ServerSocket是必須捕獲或拋出例外。

4,簡單的Client/Server程序
1. 客戶端程序
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);
//向本機的4700埠發出客戶請求
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
//由系統標准輸入設備構造BufferedReader對象
PrintWriter os=new PrintWriter(socket.getOutputStream());
//由Socket對象得到輸出流,並構造PrintWriter對象
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//由Socket對象得到輸入流,並構造相應的BufferedReader對象
String readline;
readline=sin.readLine(); //從系統標准輸入讀入一字元串
while(!readline.equals("bye")){
//若從標准輸入讀入的字元串為 "bye"則停止循環
os.println(readline);
//將從系統標准輸入讀入的字元串輸出到Server
os.flush();
//刷新輸出流,使Server馬上收到該字元串
System.out.println("Client:"+readline);
//在系統標准輸出上列印讀入的字元串
System.out.println("Server:"+is.readLine());
//從Server讀入一字元串,並列印到標准輸出上
readline=sin.readLine(); //從系統標准輸入讀入一字元串
} //繼續循環
os.close(); //關閉Socket輸出流
is.close(); //關閉Socket輸入流
socket.close(); //關閉Socket
}catch(Exception e) {
System.out.println("Error"+e); //出錯,則列印出錯信息
}
}
}

2. 伺服器端程序
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);
//創建一個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中如何實現從客戶端發送文件到伺服器端

BufferedInputStream bis = new BufferedInputStream( new FileInputStream("文件路徑"));

byte[] buf = new byte[1024];

int len = 0;
BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream);
while((len = bis.read(buf))!=-1){
bos.write(buf,0,len);

bos.flush();

}

思路是這樣的了。。。具體你自己寫吧。

『伍』 java中發送數據包的函數有幾個啊

數據包發送有很多種,但是最底層都是inputstream 和outputstream ; 上層都是封裝了這兩個類,上層根據不同的應用做了不同的封裝

『陸』 如何在Java中利用數據包求答案

盡管很多程序員不熟悉這個協議,因為對於程序來說它太難了,對於TCP來說它的使用的頻率太低。但是,這個協議是非常值得我們去學習的,因為當你在沒有創建TCP連接的時候,假如要在各程序之間以消息的形式改變數據,利用UDP是最適合的。當這個消息很短並且你不需要傳統上的連接的時候,UDP將是最理想的協議。UDP的基本形式
UDP以數據包的形式發送和接收數據。它和TCP不同的是,它沒有連接的概念,每個數據包是單獨的發送,並且沒有發送的擔保。當幾個數據包被發送到相同的位置的時候,它們可以採用不同的順序。假如你需要發送擔保和分類擔保,他們就必須有程序執行UDP的最高協議,這個協議在UDP的認證包,超時和中繼,順序包等等。或者你應該考慮使用TCP來代替。和TCP一樣,為了發送和接收數據包,你需要一個適當的網路插口,所以要java.net.DatagraSocket 類。和TCP不同的是,客戶插口和伺服器插口沒有區別,那就是說,一個DatagramSocket可以在任何時候發送和接收數據。DatagramSocket雖然很方便,但是它的使用和機器的地址和端有關,這些取決於這個機器自己的構造器。這個關聯決定了地址的來源和包傳送的插口所在的埠,並且這個地址和插口的埠在接收數據時隨時候命。假如使用的電腦有多個ip地址,你可以將插口變為一個專用地址或者是通配符地址,專用地址是指電腦上所有的IP地址。在這種情況下插口會監聽所有的即將到來的數據包,但是輸出的數據包地址將由分界面決定,就是有連接電腦的路由器決定。發送和接收數據
被發送或者接收數據是有java.net.DatagramPacket 類來決定的。假如你要發送數據包,你必須使用DatagramPacket包,設置你想發送包去的方位的埠和IP地址,並設置好數據的緩沖器。在返回的時候, DatagramPacket的數據緩沖器將作為一個參數通過,這個參數把握了所有接收的數據。假如這個數據的大小大於緩沖器的大小,將把多餘的位元組刪除,DatagramPacke同樣將包含發送者的地址和埠。連接遠端埠
UDP的一個確定就是你必須在每個包上指定目的地的地址和埠。另外UDP插口會從任何主機上接收包,這樣使你無法控制所接受的數據。但是,DatagramPacket類提供了遠程主機創建連接的概念,遠程主機單一化的執行決定於UDP。這個單一的特點由DatagramSocket.connect()來執行,它用來連接插口到遠程主機。注重到連接通過過濾包裹發送和接收,那就是說,它並沒有和遠程主機建立一個真正的連接,所以,這個方法不象TCP,它自己不會發送任何數據包,也永遠不會接受數據失敗。

『柒』 java 伺服器怎樣給客戶端傳輸數據

java需要利用scoket實現網路通信,在通信時可以利用是從客廳、獲取輸入輸出流達到傳輸數據效果

『捌』 緊急求助,java如何通過socket發送16進制的數據包

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

『玖』 java怎麼自定義一個數據包並把它發送出去包格式如圖(沒有財富值, 各位大神指點一下!)

不知道你是發向哪裡。
我們做Java通訊一般用socket通訊,將將對象轉換成位元組流,發送出去,接收端,根據約定好的協議解析數據流,把位元組流轉成數據。

閱讀全文

與java發送數據包相關的資料

熱點內容
phpmysql自增 瀏覽:164
把ppt保存為pdf 瀏覽:533
汽車密封件加密配件 瀏覽:887
黑馬程序員15天基礎班 瀏覽:560
java調整格式 瀏覽:521
香港雲伺服器租用價 瀏覽:78
linuxsublime3 瀏覽:560
imac混合硬碟命令 瀏覽:277
沈陽用什麼app租房車 瀏覽:857
00後高中生都用什麼app 瀏覽:237
戴爾塔式伺服器怎麼打開獨立顯卡 瀏覽:807
醫療程序員招聘 瀏覽:597
住宿app可砍價是什麼意思 瀏覽:133
java跳出語句 瀏覽:55
javastring個數 瀏覽:928
人工免疫演算法應用 瀏覽:79
有什麼app能收聽俄羅斯廣播電台 瀏覽:34
2015考研紅寶書pdf 瀏覽:443
程序員幾月跳槽合適 瀏覽:444
液壓油可壓縮嗎 瀏覽:946