1. 程式人生 > >TCP、UDP 網路通訊

TCP、UDP 網路通訊

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

TCP 網路通訊

TCP:可靠的傳輸層協議

服務端:

package com.zhiwei.net;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/***
 * 簡單的TCP服務端類
 * ①:建立ServerSocket:資料碼頭
 * ②:建立Socket:資料碼頭集裝箱:真正的資料集中站
 * ③:解析Socket獲取InputStream和OutputStream物件
 *   InputStream和OutputStream都和同一個Socket關聯,
 *   InputStream:負責接受客戶端的資料
 *   OutputStream:負責對客戶端做出響應
 *注:Tomcat的Http請求也是利用該原理,聯結器接受客戶端請求負責建立HttpRequest和HttpResponse物件(本質解析Socket),然後呼叫處理器處理
 * @author Yang Zhiwei
 *
 */
public class SimpleTCPServer {
    
	private static boolean flag=true;  //伺服器開啟標誌
	
	public static void main(String[] args) throws Exception {
		
		ServerSocket serverSocket=new ServerSocket(8888);
		
		while(flag){
		//當服務端程式執行到該階段時執行緒阻塞,直到接受客戶端請求才向下流轉(Debug可以檢視)
		Socket socket=serverSocket.accept();
		new ServerService(socket).run();
		
		}
		serverSocket.close();
	}
	
}

class ServerService implements Runnable{
    
	private Socket socket=null;
	
	public  ServerService(Socket socket) {
		this.socket=socket;
	}
	
	@Override
	public void run() {
		
		InputStream is = null;
		DataInputStream dis = null;
		try {
			is = socket.getInputStream();
			dis=new DataInputStream(is);
			System.out.println("客戶端請求內容:"+dis.readUTF());
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
            try {
            	if(dis!=null){
				dis.close();
            	}
				socket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}


客戶端:

package com.zhiwei.net;

import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.Socket;
/**
 * TCP客戶端的建立
 * ①:建立Socket:資料集裝箱:必須指定服務端的地址
 * ②:解析Socket資料:負責和服務端的具體資料通訊
 * @author Yang Zhiwei
 *
 */
public class SimpleTCPClient {

	public static void main(String[] args) throws Exception {
		
		Socket socket=new Socket("127.0.0.1", 8888);
		
		OutputStream os=socket.getOutputStream();
	    DataOutputStream dos=new DataOutputStream(os);
		dos.writeUTF("Hello Server.....");
		
		dos.close();
		socket.close();
	}
}

結果:


UDP 網路通訊

UDP是無狀態的傳輸層協議,如果對資料的要求不高完全可以使用UDP協議,減少資源的浪費,UDP不保證資料的可靠性,常見的QQ通訊工具是使用UDP協議的,只是在應用層的基礎上保證QQ訊息的不丟失,並不是採用TCP的傳輸協議

服務端:

package com.zhiwei.net;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

//伺服器端接受客戶端資料
public class UDPServer {

	public static void main(String[] args) throws Exception{
		
		//建立資料接收碼頭,只接受和客戶端約定的3000埠的資料
		DatagramSocket ds=new DatagramSocket(3000);
		
		//建立資料接收的資料緩衝區
        byte[] buf=new byte[1024];
		DatagramPacket dp=new DatagramPacket(buf,1024);
		
		//接受來自埠1024的資料包,並存儲在集裝箱datagramPacket中:注意一旦伺服器開啟,就會自動監聽3000埠,如果 沒有資料,則進行阻塞
		ds.receive(dp);
		
		//解析資料包中的資訊
		String data=new String(dp.getData(),0,dp.getLength());
		String ip=dp.getAddress().getHostAddress();
		int port=dp.getPort();
		
		System.out.println("ip地址:"+ip+" 埠號:"+port+" 訊息:"+data);
	    ds.close();
	}

}

客戶端:

package com.zhiwei.net;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

//傳送資料給伺服器:注意若伺服器端未開啟就傳送資料,資料包很可能會丟失
public class UDPClient {

	public static void main(String[] args) throws Exception {
        
		//資料包套接字:相當於碼頭,專門處理通訊資料及進行資料轉發設定的
		DatagramSocket ds=new DatagramSocket();
		
		String message="Hello Java World!";
		
		//資料報包:類似於集裝箱,用來儲存所有的資料資訊
		DatagramPacket dp=new DatagramPacket(
				message.getBytes(),   //資料都是已位元組資料進行傳送的,因此需要將資料進行轉換
				message.length(), //傳送資料的長度
				InetAddress.getByName("127.0.0.1"),  //傳送資料的源ip地址
				3000   //傳送資料的埠號
				);
		
		ds.send(dp);  //資料包通過碼頭DatagramSocket傳送出去
		ds.close();	  //資料傳送之後關閉通道,減少資源浪費
	}
}

結果:

相關推薦

TCPUDP網路通訊

    IP地址和埠號 埠號是用兩個位元組(16位的二進位制數)表示的,它的取值範圍是0~65535,其中,0~1023之間的埠號用於一些知名的網路服務和應用, 使用者的普通應用程式需要使用1024以上的埠號,從而避免埠號被另外一個應用或服務所佔用。     &n

TCPUDP 網路通訊

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

網路程式設計實驗一——TCPUDP網路程式設計

一、實驗目的 1、利用TCP實現套接字通訊並理解TCP通訊的工作原理。 2、利用UDP實現套接字通訊並理解UDP通訊的工作原理。 實驗環境及準備 裝有Linux系統的計算機。 二、實驗原理 1、TCP/IP協議存在於OS中,網路服務通過OS提供。 2、應用程式要

Qt開發:TCPUDP網路通訊

【原文】http://wuyuans.com/2013/03/qt-socket/ 這篇文章簡潔清晰 TCP 客戶端 #include <QtNetwork> QTcpSocket *client; char *data="hello qt!"; client

C#基於TCPUDP協議的網路通訊實現(unity)

一、TCP協議: TCP協議是面向有連線的,所以伺服器要與客戶端建立連線 伺服器端: using System; using System.Net.Sockets; using System.Net; using System.Text; public static

Network——Socket網路通訊機制以及實現舉例(TCPUDP等)

1.  網路通訊與Socket前言TCP/IP協議族中網路層的IP地址可以唯一標識網路中的主機,而傳輸層的埠可以唯一標識主機中的應用程式。Socket通常也稱作"套接字",用於描述IP地址和埠,是一個通

Android程序間通訊 - Socket使用(TCPUDP

在使用Socket實現程序間通訊前,先對網路協議相關知識進行簡單回顧。 網路分層 一般情況會將網路分為5層: 應用層     常見協議:HTTP、FTP、POP3等 傳輸層     

常見通訊協議區別——tcpudprpchttpsocket

TCP/IP TCP/IP協議是一個協議簇。裡面包括很多協議的。UDP只是其中的一個。之所以命名為TCP/IP協議,因為TCP,IP協議是兩個很重要的協議,就用他兩命名了。 tcp和udp

Java中的TCPUDP通訊

文章目錄TCP建立伺服器建立客戶端UDP小結 TCP TCP 協議提供面向連線的服務,通過它建立的是可靠地連線。Java 為 TCP 協議提供了兩個類:Socke 類和 ServerSocket 類。

iOS網路HTTPTCPUDPSocket 知識總結

一、前言          以下是我自己的學習加理解,分享給大家,同時也算是自己做的筆記吧,俗話說好記性不如爛筆頭,希望來的你能有所幫助,有什麼理解不到位的地方,還請大神些多多指教。 二、網路模型    OSI 七層模型:我們一般使用的網路資料傳輸由下而上共有七層,分別

TCPUDP網路程式設計

1、TCP 的網路程式設計開發分為伺服器端和客戶端兩部分,常見的核心步驟和流程如下: (1)TCP服務端程式設計的一般步驟為: 呼叫socket函式,建立一個套接字描述符。 建立網路地址結構,指定要監聽的IP和埠號。 呼叫bind函式,將套接字描述符與網路地址結構繫結

【計算機網路】(一)OSI, TCP/IP模型 & 網路HTTPTCPUDPSocket 基本知識總結

OSI 七層模型   我們一般使用的網路資料傳輸由下而上共有七層,分別為物理層、資料鏈路層、網路層、傳輸層、會話層、表示層、應用層,也被依次稱為 OSI 第一層、第二層、⋯⋯、 第七層。 如下圖: 各層功能簡介 1.物理層(Physical Layer)  

圖解HTTP,狀態碼,TCPUDP網路協議相關總結(持續更新)

前言:主要是記錄學習《圖解HTTP》這本書的知識,此外,還會夾雜一些平時整理的網路相關的筆記。 一、TCP/IP 的分層管理 1.首先分為4層:應用層,傳輸層,網路層,鏈路層。 應用層:決定了向用戶提供應用服務時通訊的活動。TCP/IP 協議族內預存了各類通用的應用服務

以太坊原始碼分析之 P2P網路(三UDP底層通訊

區塊鏈特輯 :https://blog.csdn.net/fusan2004/article/details/80879343,歡迎查閱,原創作品,轉載請標明!這周工作有點小忙,部門區塊鏈基礎平臺的開發開始進入節奏了,和上一篇間隔間隔有點久了,以後還是要堅持,不能剛開始就犯毛

網路協議概述(網路層次結構TCPUDP

1.網路協議縱覽 參考文章:http://www.cnblogs.com/syfwhu/p/5237652.html 網路協議 網路協議是網路上所有裝置(網路伺服器、計算機及交換機、路由器、防火牆等)之間通訊規則的集合,它規定了通訊時資訊必須採用的格式和這些格式的意義。大多數

SocketTCPUDPHTTPFTP等網路協議

1、TCP/IP是個協議組,可分為三個層次:網路層、傳輸層和應用層。 在網路層有IP協議、ICMP協議、ARP協議、RARP協議和BOOTP協議。 在傳輸層中有TCP協議與UDP協議。 注意:TCP是一種面向連線(連線導向)的、可靠的、基於IP的傳輸層協議;UDP協議的全稱

初識httphttpsTCP/IPSocket網路通訊

網路由下往上分為:  物理層–                      資料鏈路層– 網路層–                       IP協議 傳輸層–                       TCP協議 會話層– 表示層和應用層–           HTTP協議 一、TCP/

SOCKET通訊TCPUDP資料包大小的確定

TCP、UDP資料包大小的確定 UDP和TCP協議利用埠號實現多項應用同時傳送和接收資料。資料通過源埠傳送出去,通過目標埠接收。有的網路應用只能使用預留或註冊的靜態埠;而另外一些網路應用則可以使用未被註冊的動態埠。因為UDP和TCP報頭使用兩個位元組存放埠號,所以埠號的有效範圍是從0到6

通過shell終端直接開啟socket檔案進行TCPUDP通訊

linux中有一個特殊的檔案/dev/tcp,開啟這個檔案就類似於發出了一個socket呼叫,建立一個socket連線,讀寫這個檔案就相當於在這個socket連線中傳輸資料。 開啟/dev/tcp 以讀寫方式開啟/dev/tcp,並指定伺服器名為: www.c

Android網路程式設計TCPUDP(三)——UDP例項:搜尋區域網所有的裝置

接上面的UDP,本篇主要討論如何在區域網中搜索所有的裝置,這個需求在物聯網應用的比較多,也比較綜合,特把名字加在標題中了。最後一塊是網路程式設計的常見問題。 3.6 例項:在區域網內搜尋裝置 假設你家裡安裝了智慧家居,所有的裝置都是通過Wifi連線自己家