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實現一個回聲伺服器,就是伺服器會將客戶端發送過來的數據傳回給客戶端。
『貳』 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應用程序、分布式系統和嵌入式系統應用程序等。
『叄』 java網路編程:程序問題,接收不到數據
這是java網路編程里的UDPServer和UDPClient之間簡單通宏仿信程序啊,等等我看看你的程序再說
你想要的是不是這種效果?
import java.net.*;
class UdpSend{
public static void main(String[] args)throws Exception{
//1.創建udp服務,通過DatagramSocket對象
DatagramSocket ds = new DatagramSocket(8888);//---這兒的埠號不要和UdpRece的一樣
//2.確定數據,並封裝成數據包。
//DatagramPacket(byte[] buf, int length, InetAddress address,
int port)
//構造數據報包,用正豎來將長度為 length 的包發送到指定主機上的
指定埠號。
byte[] buf = "udp shu ju lai le".getBytes();
DatagramPacket dp =
new DatagramPacket(buf,buf.length,InetAddress.getByName
("169.254.200.14"),10000);//----這兒的埠號保持與UdpRece一樣
//3.通過Socket服務,將已有的數據包發送出去。通過send方法。
ds.send(dp);
//4.關閉資源
蔽清纖 ds.close();
}
}
最後想說,先運行UdpRece 再運行UdpSend,反過來UdpSend要運行2遍
『肆』 java怎麼實現JSON打包UDP
java實現JSON打包UDP cJSON支持在C程序中創建和解析JSON數據,其提供多種方法供C程序使用,最直接的是將cJSON.c和cJSON.h加入到C工程中
(1) QJsonObject用於在Qt中創建JSON對象
(2)數據傳輸通過UDP運行
『伍』 在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));
『陸』 我要一份用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); //出錯,則列印出錯信息
}
}
}
『柒』 java socket實現兩個客戶段或多個客戶端之間通信,該怎麼解決
javasocket有兩種方式。一種是UDP這個可以直連,不需要伺服器。一種是TCP這個是肯定要能過伺服器來通信的。所以你說的。鏈接建立完畢後不再通過伺服器!這個可以實現,但會麻煩一些。1.先說一下簡單的點的吧。用TCP的方式。你所有的消息都是發給伺服器。包含你的IP及通信埠,及對方的IP及通信埠信息。當然這些是隱藏在數據報中的。這樣由伺服器來進行分發。2.你說的那種方式有點類似TCP與UDP混合。首先啟動一個SERVER然後每一個客戶端,先要登陸SERVER,並在server上記錄下你的IP及通信埠信息,如果你要連接某一個客戶端。先要向伺服器發出一個申請,獲得到方的IP及埠信息,然後進行UDP連接。連接上以後,就是直接發送息,不需要伺服器了。javasocket的東西,以前做過一些,所以有思路,但沒有現成的代碼。有問題再聯系。
『捌』 java網路編程包含些什麼
java網路編程通常包括三部分TCP/IP , UDP ,URL ;socket只是其中的一個套接字。web,jsp與上面一點關系也沒有,上面是j2se的內容。下面則是j2ee內容。web是一個服務,而jsp是一種技術。實在找關系的話,web包括了jsp.
『玖』 Java中基於UDP的非阻塞編程
configureBloging(false)
然後注冊監視器,selector.open();
得到句柄;selectionKey key=(SelectionKey)selector.selected();