日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Java利用TCP協(xié)議實現(xiàn)客戶端與服務(wù)器通信(附通信源碼)

瀏覽:144日期:2022-08-29 16:57:28

進行TCP協(xié)議網(wǎng)絡(luò)程序的編寫,關(guān)鍵在于ServerSocket套接字的熟練使用,TCP通信中所有的信息傳輸都是依托ServerSocket類的輸入輸出流進行的。

上一篇博客和大家分享了在網(wǎng)絡(luò)編程中要注意的基礎(chǔ)知識,關(guān)于IP、TCP、UDP以及端口和套接字的一些概念,想了解的小伙伴可以看我的這篇文章“盤點那些進行網(wǎng)絡(luò)編程必須要知道的基礎(chǔ)知識”,那么今天大灰狼就來和大家分享一下如何使用TCP/IP進行網(wǎng)絡(luò)程序的開發(fā)。

TCP協(xié)議概念

先來了解一下TCP協(xié)議的基本概念。

我們知道TCP是可靠而非安全的網(wǎng)絡(luò)協(xié)議。它可以保證數(shù)據(jù)在從一端送至另一端的時候可以準(zhǔn)確的送達,并且抵達的數(shù)據(jù)的排列順序和送出時的順序是相同的。因此在進行TCP協(xié)議通信的時候,我們首先應(yīng)該保證客戶端和服務(wù)器之間的連接通暢。

而TCP協(xié)議程序的編寫,仍然是依靠套接字Socket類來實現(xiàn)的,并且利用TCP協(xié)議進行通信的兩個程序之間是有主次之分的,即一個是服務(wù)器的程序,另一個是客戶端的程序。因此兩者的功能和編寫上也略有不同。如下圖是服務(wù)器與客戶端之間進行通信的示意圖:

Java利用TCP協(xié)議實現(xiàn)客戶端與服務(wù)器通信(附通信源碼)

以上就是在TCP協(xié)議中客戶端與服務(wù)器建立連接的過程示意圖。而在這其中起到關(guān)鍵作用的就是服務(wù)器端套接字ServerSocket和客戶端套接字Socket。通過這兩個套接字來建立服務(wù)器和客戶端,從而利用其中的函數(shù)進行數(shù)據(jù)的通信。

在ServerSocket類中有很多需要注意的地方,接下來大灰狼和大家分享一下ServerSocket類的具體用法:

ServerSocket類

ServerSocket類存在于Java.net包中,表示服務(wù)器端的套接字,在使用時需要首先導(dǎo)入這個類,我們也知道ServerSocket類的主要功能就是通過指定的端口等待來自于網(wǎng)絡(luò)中客戶端的請求并且進行連接。

值得注意的是:服務(wù)器套接字一次只能與一個客戶端套接字進行連接,因此如果存在多臺客戶端同時發(fā)送連接請求,則服務(wù)器套接字就會將請求的客戶端存放到隊列中去,然后從中取出一個套接字與服務(wù)器建立的套接字進行連接,但是服務(wù)器端能夠容納的客戶端套接字也不是無限的,當(dāng)請求連接的數(shù)量大于最大容納量時,那么多出來的請求就會被拒接,一般來說隊列的默認大小是50。

ServerSocket類的構(gòu)造方法通常會拋出IOException異常,具體有以下幾種形式: ServerSocket():創(chuàng)建非綁定服務(wù)器套接字 ServerSocket(inr port):創(chuàng)建綁定到特定端口的服務(wù)器套接字 ServerSocket(int port, int backlog):利用指定的backlog創(chuàng)建服務(wù)器套接字,并將其綁定到指定的服務(wù)器端口上 ServerSocket(int port, int backlog, InetAddress bindAddress):使用指定的端口,偵聽backlog和要綁定到本地的IP地址創(chuàng)建服務(wù)器。這種情況適用于計算機上有多個網(wǎng)卡和多個IP地址的情況,用戶可以明確的規(guī)定ServerSocket在哪塊網(wǎng)卡或哪個IP地址上等待用戶的連接請求。

以下是ServerSocket類中一些常用的方法:

ServerSocket類中常用的方法

方法

返回值 說明 accept() Socket 等待客戶機連接,若連接則創(chuàng)建一個客戶端套接字 isBound() boolean 判斷ServerSocket的綁定狀態(tài) getInetAddress() InetAddress 返回此服務(wù)器套接字的本地地址 isClosed() boolean 返回服務(wù)器套接字的關(guān)閉狀態(tài) close() void 關(guān)閉服務(wù)器套接字 bind(SocketAddress endpoint) void 將ServerSocket綁定到特定地址(IP地址和端口號) getInetAddress() int 返回服務(wù)器套接字等待的端口號

了解了ServerSocket類的基本方法之后,就是如何進行客戶端和服務(wù)器進行連接的問題了。

在服務(wù)器端我們可以調(diào)用ServerSocket類的accpet()方法與請求連接的客戶機建立連接,這時會返回一個和客戶端相連接的Socket對象,這個時候其實已經(jīng)連接成功了,使用getInetAddress()方法就可以獲取到進行請求的客戶機的IP地址。

對于如何進行客戶端和服務(wù)器端數(shù)據(jù)的通信,就要用到數(shù)據(jù)的輸入流和輸出流了,服務(wù)器端的Socket對象使用getOutputStream()方法獲取到的輸出流,將指向客戶端的Socket對象使用getInputStream()方法獲取到的輸入流。由此就實現(xiàn)在服務(wù)器向客戶端發(fā)送數(shù)據(jù)的一個過程,同樣的道理,客戶端端的Socket對象使用getOutputStream()方法獲取到的輸出流,將指向服務(wù)器端的Socket對象使用getInputStream()方法獲取到的輸入流。從而實現(xiàn)由客戶端向服務(wù)器發(fā)送數(shù)據(jù)的過程。

注意:accpet()方法會阻塞線程的繼續(xù)執(zhí)行,如果在對應(yīng)的接口沒有收到客戶端的呼叫,則程序會停留在此處,直到獲取到客戶端的呼叫才會繼續(xù)向下執(zhí)行,但是如果服務(wù)器沒有收到來自客戶端的呼叫請求,并且accpet()方法沒有發(fā)生阻塞,那么通常情況下就是程序出了問題,一般來說可能是使用了一個已經(jīng)被其他程序占用了的端口號,導(dǎo)致ServerSocket沒有綁定成功!遇到這種情況可以嘗試更換新的端口號。

了解了TCP協(xié)議的通信過程,接下來就是進行TCP通信程序的書寫啦!

在網(wǎng)絡(luò)通信中,如果只要求客戶機向服務(wù)器發(fā)送信息,不要求服務(wù)器向客戶端反饋信息的行為稱為“單向通信”,要求客戶機和服務(wù)器雙方互相通信的過程稱為“雙向通信”,雙向通信只不過是比單向通信多了一個服務(wù)器向客戶端發(fā)送消息的過程,

接下來分別是服務(wù)器端和客戶端程序的編寫:

服務(wù)器端程序

package server_1;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket; public class MyTcp { private ServerSocket server;//設(shè)置服務(wù)器套接字private Socket client;//設(shè)置客戶端套接字//連接客戶端函數(shù)void getServer(){try {server = new ServerSocket(1100);//建立服務(wù)器 端口為1100System.out.println('服務(wù)器建立成功!正在等待連接......');client = server.accept();//調(diào)用服務(wù)器函數(shù)對客戶端進行連接System.out.println('客戶端連接成功!ip為:' + client.getInetAddress());//返回客戶端IPgetClientMessage();//調(diào)用信息傳輸和接收函數(shù)} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}void getClientMessage(){try {while (true) {InputStream is = client.getInputStream();//獲取到客戶端的輸入流byte[] b = new byte[1024];//定義字節(jié)數(shù)組int len = is.read(b);//由于信息的傳輸是以二進制的形式,所以要以二進制的形式進行數(shù)據(jù)的讀取String data = new String(b, 0,len);System.out.println('客戶端發(fā)來消息:' + data);//定義發(fā)送給客戶端的輸出流OutputStream put = client.getOutputStream();String putText = '我已經(jīng)收到!歡迎你!';put.write(putText.getBytes());//將輸出流信息以二進制的形式進行寫入}} catch (Exception e) {// TODO: handle exception}try {//判斷客戶端字節(jié)流不是空,則關(guān)閉客戶端if (server != null) {server.close();}} catch (Exception e) {// TODO: handle exception}}public static void main(String[] args) {// TODO Auto-generated method stubMyTcp myTcp = new MyTcp();//調(diào)用該類生成對象myTcp.getServer();//調(diào)用方法} }

客戶端程序

package client_1; import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException; public class MyClient {private Socket client;//定義客戶端套接字//建立客戶端函數(shù)void getClient(){try {client = new Socket('127.0.0.1', 1100);//建立客戶端,使用的IP為127.0.0.1,端口和服務(wù)器一樣為1100System.out.println('客戶端建立成功!');setClientMessage();//調(diào)用客戶端信息寫入函數(shù)} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//定義客戶端信息寫入函數(shù)void setClientMessage(){try {OutputStream pt = client.getOutputStream();//建立客戶端信息輸出流String printText = '服務(wù)器你好!我是客戶端!';pt.write(printText.getBytes());//以二進制的形式將信息進行輸出InputStream input = client.getInputStream();//建立客戶端信息輸入流byte [] b = new byte[1024];//定義字節(jié)數(shù)組int len = input.read(b);//讀取接收的二進制信息流String data = new String(b, 0,len);System.out.println('收到服務(wù)器消息:' + data);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} try {//如果客戶端信息流不為空,則說明客戶端已經(jīng)建立連接,關(guān)閉客戶端if (client != null) {client.close();}} catch (Exception e) {// TODO: handle exception}}public static void main(String[] args) {// TODO Auto-generated method stub//生成客戶端類對象MyClient myClient = new MyClient();myClient.getClient();} }

同時要注意:在客戶端和服務(wù)器搭建成功之后,應(yīng)該先打開服務(wù)器等待連接,再打開客戶端進行連接,同樣在進行關(guān)閉時,應(yīng)該先關(guān)閉客戶端,再關(guān)閉服務(wù)器。

以上面程序為例:

打開服務(wù)器等待客戶端連接

Java利用TCP協(xié)議實現(xiàn)客戶端與服務(wù)器通信(附通信源碼)

打開客戶端與服務(wù)器連接成功,并且實現(xiàn)雙向通信:

Java利用TCP協(xié)議實現(xiàn)客戶端與服務(wù)器通信(附通信源碼)

注意:當(dāng)一臺機器上安裝了多個網(wǎng)絡(luò)應(yīng)用程序時,很可能指定的端口已經(jīng)被占用,甚至還可能遇到之前運行很好的程序突然卡住的情況,這種情況很可能是端口被別的程序占用了,這時可以運行netstat-help來活的幫助,可以使用命令netstat-an來查看該程序所使用的端口。

到此這篇關(guān)于Java利用TCP協(xié)議實現(xiàn)客戶端與服務(wù)器通信(附通信源碼)的文章就介紹到這了,更多相關(guān)Java 客戶端與服務(wù)器通信內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
蜜臀a∨国产成人精品| 日本高清不卡一区二区三区视频| 99国内精品| 久久精品91| 日韩视频一区| 日韩三区免费| 亚洲精品在线二区| 日韩中文字幕亚洲一区二区va在线| 亚洲福利国产| 欧美综合另类| 性欧美xxxx免费岛国不卡电影| 欧美午夜精彩| 久久国产精品久久w女人spa| 少妇精品久久久一区二区三区| 日本午夜精品视频在线观看| 国产午夜精品一区在线观看| 日韩精品一区二区三区中文| 久久99久久久精品欧美| 国产成人a视频高清在线观看| 亚洲伊人av| 91精品啪在线观看国产18| 久久中文亚洲字幕| 久久亚洲风情| 日本电影久久久| 免费日韩成人| 欧美天堂视频| 国产农村妇女精品一二区| 亚洲三级视频| 国产精品白浆| 久久九九电影| 美日韩精品视频| 日韩国产欧美在线播放| 麻豆成人91精品二区三区| 超级白嫩亚洲国产第一| 日韩和的一区二在线| 激情视频一区二区三区| 亚洲精选久久| 精品一区二区三区中文字幕| 国产综合欧美| 日韩欧美另类中文字幕| 久久伊人国产| 蜜桃成人av| 国产suv精品一区二区四区视频 | 精品丝袜久久| 亚洲欧洲午夜| 久久久一本精品| 国产一区二区久久久久| 福利视频一区| 国产欧美日韩在线观看视频| 成人午夜亚洲| 亚洲欧美久久久| 国产日韩一区二区三区在线播放| 成人亚洲一区| 视频一区欧美日韩| 另类小说一区二区三区| 91精品观看| 国产精品一区亚洲| 亚洲电影在线| 日韩一区二区三区高清在线观看 | 日韩精品一二区| 久久伊人久久| 日韩在线一二三区| 成人午夜网址| 亚洲美女久久| 日韩欧美二区| 国产欧美日韩在线观看视频| 午夜精品一区二区三区国产| 美女精品视频在线| 日韩影院精彩在线| 新版的欧美在线视频| 日韩一区二区三区高清在线观看| 久久久久久一区二区| 亚洲日产av中文字幕| 神马久久午夜| 国产视频网站一区二区三区| 午夜久久黄色| 成人免费一区| 日本欧美大码aⅴ在线播放| 激情综合在线| 精品久久视频| 日本国产欧美| 亚洲激情二区| 9999国产精品| 国产精品亚洲综合久久| 午夜一级在线看亚洲| 日韩精品诱惑一区?区三区| av一区在线| 国产精品xvideos88| 国产毛片一区二区三区| 精品日韩在线| 模特精品在线| 日韩大片在线观看| 久久精品99国产国产精| 欧美午夜不卡| 久久伊人久久| 国产精品欧美大片| 99免费精品| 久久99影视| 日韩中文av| 99国产精品视频免费观看一公开 | 国产精品人人爽人人做我的可爱 | 久久av免费看| 欧美片网站免费| 中文字幕亚洲精品乱码| 亚洲免费激情| 久久激情网站| 在线亚洲人成| 精品国产麻豆| 国产欧美在线观看免费| 免费黄网站欧美| 美女亚洲一区| 999久久久国产精品| 亚洲啊v在线| 美女av在线免费看| 精品一区二区三区中文字幕视频| 国产精品自在| 国产精品午夜一区二区三区| 久久精品av麻豆的观看方式| 日韩在线成人| 亚洲1区在线观看| 综合欧美精品| 日本成人在线不卡视频| 日韩avvvv在线播放| 日韩一区二区三免费高清在线观看| 久久一二三区| 亚洲精品在线二区| 天堂va欧美ⅴa亚洲va一国产| 91国内精品| 亚洲精品高潮| 一区二区三区网站| 日韩欧美中文字幕在线视频| 亚洲一区二区毛片| 亚洲精品在线国产| 国产日韩欧美中文在线| 久久精品三级| 欧美 日韩 国产一区二区在线视频| 日本不卡免费高清视频在线| 精品黄色一级片| 欧美亚洲tv| 日本少妇精品亚洲第一区| 日韩二区在线观看| 69堂免费精品视频在线播放| 国产精品v日韩精品v欧美精品网站| 国产日韩欧美一区| 国产激情综合| 中文字幕在线官网| 99精品美女| 久久国产66| 日本在线观看不卡视频| 国产精品一区二区中文字幕| 国产专区精品| 999久久久国产精品| 伊人久久亚洲热| 另类国产ts人妖高潮视频| 男人操女人的视频在线观看欧美| 一区二区三区四区在线观看国产日韩| 日本在线观看不卡视频| 国产精品qvod| 婷婷综合六月| 久久最新视频| 久久国产乱子精品免费女| 精品久久一区| 国产精品av久久久久久麻豆网| 亚洲在线免费| 91精品国产自产观看在线| 荡女精品导航| 亚洲少妇自拍| 国产精品成人一区二区网站软件| 久久久久久婷| 黑丝一区二区| 国产欧美久久一区二区三区| 成人国产精品一区二区网站| 黄色不卡一区| 色综合视频一区二区三区日韩| 欧美国产亚洲精品| 99精品国产一区二区三区| 亚洲一二av| 国精品产品一区| 美女精品在线观看| 精品国产一区二区三区av片| 91精品99| 国产成人精品三级高清久久91| 精品三区视频| 国户精品久久久久久久久久久不卡| 在线一区欧美| 悠悠资源网久久精品| 欧美二区视频| 亚洲精选成人| 国产精品日本一区二区不卡视频 | 亚洲成人国产| 久久中文字幕一区二区| 中文字幕在线高清| 亚洲综合五月| 日韩大片免费观看| 亚洲精品亚洲人成在线观看| 国产精品成人a在线观看| 免费看欧美美女黄的网站| 久久国产欧美日韩精品| 国产精品88久久久久久| 免费在线欧美黄色|