日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java TCP 编程简介

發布時間:2025/3/20 java 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java TCP 编程简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.TCP 協議簡介

http://blog.csdn.net/nvd11/article/details/40954043

之前的博文簡單介紹了網絡編程中的UDP協議


其實更常用的網絡協議是TCP協議.

* UDP協議是不可靠的, 因為UDP協議類似與發郵件, 發送者不會關心接受者的狀態. 總之發就是了. 接受者能不能收到是他的事情...? 也就是說郵件是有幾率會丟失的.

* 而TCP協議是相對可靠的, 類似于打電話, 發送方首先要跟接收方打通1條連接通道(類似首先要打通電話), 然后才能通過這條通道發送信息.? 如果接受者不在線, 發送者是無法發送信息的.?

? 也就是將大大保證了發送的每條信息, 接受者都能get到.


二.TCP 的若干個名詞概念

信息要傳輸, 必須要有兩個party, 分別是發送方和接收方.

而 TCP協議, 發送方和接收方地位是相對的, 也就是說A可以發送信息給B, B也可以發送信息給A.

也就沒有發送和接受方的概念了, 可以把A,B可以理解成兩個終端.


但是TCP信息雙方的兩個終端(程序)是可以分成Server端和Client端的.



2.1 Client 程序

好了, 既然信息的兩端可以分成Client和Server, 它們之間可以互相發送接受信息, 那么到底是誰是Client, 誰是Server呢.

實際上, 我們定義:

首先發送連接請求的是Client.


就如A電話給B, B接通后它們就可以聊天了,? 這時我們認為A是Client, B是Server.


2.2 Server 程序

Server端就是待接通的一方了.

Server端有一個好明顯的特性, 也就是將Server端必須長期保持監聽(listening)狀態.? 通俗地講, Server端的程序必須保持在線.


就如A給B打電話, 作為B, 必須保持電話在線.

而A作為Client, 只需要想打電話時開機就得了. 平時關機也沒關系.


2.3 Client - Server - Client

很多時, Client的目的不是想跟Server通信, 而是跟另1個Client通信.

這時, Server就作為1個信息中轉的作用.


注意, 這時實際上有兩個 TCP通迅的行為了.


分別是Client A 和 ServerB

??????? 和ClientC 和 ServerB


但效果看起來就如A跟C在通信.

地球上大多數聊天工具都是這種模式的.? 一旦ServerB掛了, 就不能用了..


2.4 IP地址

TCP協議中, IP地址同樣是作為表示網絡機器的作用, 就如打電話雙方中的電話號碼.

究竟要把信息發送到哪里.??? 作為Server, ip地址一般是固定的, 但是Client則不是.


2.5 端口(Port)

端口表示某條信息到底要發送給制定計算機中的哪1個程序.

例如一個Server 程序B正在監聽端口12345,? 則所有發送給這個端口的信息, 操作系統都會把這些信息交給這個B程序

但是發送到這個臺計算機的另1個端口的信息,? 這個B程序是不知道的.


2.6 監聽(listening)

監聽這個名詞相信大家經常見到.

實際上監聽代表1個程序里面有1個循環.

這個循環在不斷地"嘗試" 從某個指定端口接受信息.

簡單地講, 如果程序B正在監聽端口12345,? A就發送到這個端口的信息(適當的協議), B都會收到.

但是如果B程序沒在監聽, 甚至被關閉沒在執行, 則收不到這個端口的信息了.



2.7 通道.

我們上面說過, TCP協議兩個終端 通信前提是 打通它們之間的通信通道.


實際上,? 一條通道的信息傳輸方向是單向的.


所以TCP協議的兩個終端之間實際上會有兩條通道, 一條是A通向B的, 另一條是B通向A的.


在編程中, 這兩條通道實際上就是兩條方向相反的Stream.

對于終端A, 一條是InputStream, 另一條是OutputStream

對于終端B, A的InputStream就是B的OuputStream,? A的OutputStream就是B的InputStream.


2.8 數據字節流Stream

我的博客里有若干關于流(Stream)的博文,? 如果不懂什么是流的讀者, 沒必要往下看了, 強烈建議先去弄懂什么是流.


三.Java TCP協議中的 若干個關鍵類

3.1 Socket

Socket這個詞大家也經常見啦, 它的中文名是"套接字",? 很難理解啊, 下面都直接用Socket來稱呼它了.


Socket實際就是上面所說的"終端" 程序所使用的發送和接受信息用的工具.


通俗地講,? 假如 A 和 B 打電話,? 則A 和 B分別是兩個程序,? 而Socket就是A和B所使用的電話了.


Socket里面有兩個關鍵方法,

分別是getOutputStream() 和 getInputStream().'


很明顯, Socket里面的兩條數據流才是通訊的關鍵嘛.


畫一幅圖便于理解:


也就是將Socket只不過是程序中使用的一個類, 這個類用于使用TCP協議來發送接受數據.


3.2 ServerSocket

只看這個詞, 肯定是與Server有關了,

實際上ServerSocket 是 Server程序中, 用于創建Socket(上面那個類)的一個工廠.


如果在Client端, 我想創建1個Socket對象, 直接用Socket 類的new()方法, 然后制定目標ip和端口,

一旦Socket的對象創建, 則回自動向目標(Server)發送連接請求


但是Server端則必須用ServerSocket的? accept()方法來監聽, 一旦收到連接請求.

則會生成Server端的Socket對象,? 這個Socket 對象 與 Client端的Socket對象之間就會有兩條打通了的方向相反的數據流.



四.一個簡單的Java TCP協議小程序


這個程序真的是很簡陋的, 它有兩個類TCPServer1 和 TCPClient1

一旦TCPServer1被執行,? 則它會監聽某個指定端口(10019)

一旦TCPClient1被執行, 它會向Server端的10019發送一條信息,? Server收到這個信息后會返回一條確認信息回給Client端..


4.1 TCPServer1.java


import java.net.ServerSocket; import java.net.Socket; import java.io.*;public class TCPServer1{private static int port = 10019;public static void main(String[] args){try{tcpServer();}catch(Exception e){e.printStackTrace(); }}public static void tcpServer() throws Exception{//ServerSocket is Factory of Socket, ServerSocket ss = new ServerSocket(port);//a loop to list the portwhile(true){//Function accept is a blocking method, will listing the port, untill get a connect//request from a client. it means if no any request form client,//the program will keep waiting here...////After got a connect request from a client, the ServerSocket will package//the connection to a Socket Object ////The socket.getInputStream of Server is the same one with the socket.getOutputStream of Client.//The socket.getOutputStream of Server is the same one with the socket.getInputStream of Client.Socket s = ss.accept();System.out.println("A connection is setup!");//get a feedback to clentDataInputStream dis = new DataInputStream(s.getInputStream());//print the message from client, readUTF() is also a blocking method.System.out.println(dis.readUTF()); //send a feedback to client.DataOutputStream dos = new DataOutputStream(s.getOutputStream());dos.writeUTF("Your message is sent to Server successfully!");dis.close();dos.close();s.close();}} }
里面的內容大部分是注釋啦

流程很簡單,

首先建立1個ServerSocket對象,

然后循環監聽端口10019.


一旦受到連接請求, 就建立1個Socket對象,?

然后嘗試接受1條信息.

然后發送給Client端1條信息.

最后關閉資源



在這個循環中.

每次受到鏈接請求都有1個Socket對象生成.

所以一般在Server端,?? ServerSocket的對象只會有1個

但是Socket對象可能會有多個,? 它們分別對應不同Client端.


所以作為網絡服務器的Server一定要足夠強大, 生產中它必須同時跟多個Client通訊, 而Client實際上只會同1個Server通訊.(或者說利用Server間接地跟其他Client通訊)


值得注意的是s.accept()方法.

這個是1個阻塞方法, 除非受到1個連接請求, 否則程序會卡在這個方法一直等待..



4.2 TCPClient1.java

import java.net.Socket; import java.io.*;public class TCPClient1{public static String targetIP = "192.168.1.107";public static int port = 10019;public static void main(String[] args){try{tcpClient();}catch(Exception e){e.printStackTrace();} }public static void tcpClient() throws Exception{//Once the Socket Object is created, it will send the connect request to//Server, if the connection failed to connect, will prompt excepions..////yes, it needs the listing method(socket.accept()) running in Server side.Socket s = new Socket(targetIP, port);//if no any exception//Send a message to ServerDataOutputStream dos = new DataOutputStream(s.getOutputStream());dos.writeUTF("Hi Server!");dos.flush();//try to get message from ServerDataInputStream dis = new DataInputStream(s.getInputStream());System.out.println(dis.readUTF());dos.close();dis.close();s.close();} }


上面的s.accept()方法在等待什么?

就是等待Client端的 Socket 類的構造方法啊.


看看下面這句代碼

Socket s = new Socket(targetIP, port);

Client端的Socket直接使用構造方法創建.

但是

* 必須制定目標(Server)的ip和端口

* Server端必須有程序在監聽這個端口.


一旦發現Server端有程序在監聽, 則這個對象就會成功創建.

后面就是流的事情了.


否則, 如果Server端那個端口沒有程序在監聽, 則構造方法會拋出異常...





4.3 執行

分別compile它們成兩個類.

放在局域網的兩臺機器上執行(一臺是虛擬機).


就可以看出效果了:










































































總結

以上是生活随笔為你收集整理的Java TCP 编程简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产久一| 亚洲在线免费观看 | 色噜噜综合网 | 操丰满女人 | 欧美第一页草草影院 | 国产成人无码精品久在线观看 | 一区三区视频在线观看 | 久久久久久在线观看 | 日韩亚射吧 | 嫩草影院中文字幕 | 欧洲一区二区 | 开心激情播播网 | 午夜伦理福利视频 | 久草最新视频 | a网站在线观看 | 久久久久久久久久久久久久久久久久久 | 国产精品无码毛片 | 超碰97在线免费观看 | 日韩有码第一页 | 伊人影视久久 | 可以在线观看的av网站 | 91久久国语露脸精品国产高跟 | 8x8ⅹ国产精品一区二区二区 | 黄色网页在线 | 天天视频亚洲 | 精品在线免费观看视频 | 色女孩综合 | 992在线观看 | 中文无码一区二区三区在线观看 | 麻豆视频在线观看免费网站 | 国产美女视频一区 | 亚洲h视频在线观看 | 成人爽爽爽 | 男人懂的网站 | 日韩久久精品 | 公侵犯人妻中文字慕一区二区 | 国产美女菊爆在线播放APP | 丁香花高清在线观看完整动漫 | 永久久久久久 | 91精品国产高清一区二区三密臀 | 亚洲永久在线 | 亚洲国产精品免费 | 免费看毛片的网站 | 亚洲精品乱码久久久久久久久久久久 | 激情网站免费 | 丁香花电影免费播放在线观看 | 全部毛片永久免费看 | 亚洲激情三区 | 极品色影视 | 国产超碰自拍 | 欧美一级片a | 国产精品久久久久久久免费大片 | 伊人网大香| 免费的毛片网站 | 亚洲欧美国产精品久久久久久久 | 国产一区自拍视频 | 六月丁香激情网 | 欧美亚洲在线观看 | 精品少妇v888av| 九九精品视频免费 | 成人淫片 | 久热精品在线观看视频 | 亚洲一区二区三区四区五区xx | 很很干很很日 | 成人夜色 | 欧美67194| 男女乱淫视频 | 日本一区二区三区在线观看视频 | 午夜一级在线 | 黄色一级片免费播放 | 色婷婷婷婷色 | 国内露脸中年夫妇交换 | 国产激情片 | 国产1区2区在线观看 | 欧美a视频在线观看 | 91本色 | 99久久视频| 一个色综合网 | 国产亚洲精品精品国产亚洲综合 | 国产av国片偷人妻麻豆 | 亚洲av无码一区二区三区性色 | 亚洲九九视频 | av片观看| 婷婷丁香六月 | 欧美精品卡一卡二 | 欧美福利专区 | 人人插人人澡 | 痴汉电车在线观看 | 欧美熟女一区二区 | 色噜噜狠狠狠综合曰曰曰 | 欧美毛片在线观看 | 日本一区二区在线不卡 | 爱操在线 | 国产人妖ts| 中出在线 | 玖玖网| 免费操片 | 久久99久久99精品免视看婷婷 | 成人免费视频网 |