最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java網(wǎng)絡(luò)編程之TCP通信完整代碼示例

 更新時(shí)間:2017年12月08日 15:10:32   作者:溫布利往事  
這篇文章主要介紹了Java網(wǎng)絡(luò)編程之TCP通信完整代碼示例,具有一定借鑒價(jià)值,需要的朋友可以了解下。

一、概述

  Socket類是Java執(zhí)行客戶端TCP操作的基礎(chǔ)類,這個(gè)類本身使用代碼通過主機(jī)操作系統(tǒng)的本地TCP棧進(jìn)行通信。Socket類的方法會(huì)建立和銷毀連接,設(shè)置各種Socket選項(xiàng)。

  ServerSocket類是Java執(zhí)行服務(wù)器端操作的基礎(chǔ)類,該類運(yùn)行于服務(wù)器,監(jiān)聽入站TCP連接,每個(gè)socket服務(wù)器監(jiān)聽服務(wù)器的某個(gè)端口,當(dāng)遠(yuǎn)程主機(jī)的客戶端嘗試連接此端口時(shí),服務(wù)器就被喚醒,并返回一個(gè)表示兩臺(tái)主機(jī)之間socket的正常Socket對(duì)象。

二、什么是TCP?  

  TCP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。TCP通信分為客戶端和服務(wù)器端,對(duì)應(yīng)的對(duì)象是分別是Socket和ServerSocket。

  當(dāng)一臺(tái)計(jì)算機(jī)需要與另一臺(tái)遠(yuǎn)程計(jì)算機(jī)連接時(shí),TCP協(xié)議會(huì)讓他們建立一個(gè)連接:用于發(fā)送和接收數(shù)據(jù)的虛擬鏈路。TCP協(xié)議負(fù)責(zé)收集信息包,并將其按適當(dāng)?shù)拇涡蚍藕脗魉停诮邮斩耸盏胶笤賹⑵湔_的還原。為了保證數(shù)據(jù)包在傳送中準(zhǔn)確無誤,TCP使用了重發(fā)機(jī)制:當(dāng)一個(gè)通信實(shí)體發(fā)送一個(gè)消息給另一個(gè)通信實(shí)體后需要收到另一個(gè)實(shí)體的確認(rèn)信息,如果沒有收到確認(rèn)信息,則會(huì)再次重發(fā)剛才發(fā)送的信息。

三、TCP通信

  1、構(gòu)造函數(shù)

  Socket類實(shí)現(xiàn)客戶端套接字,通過構(gòu)造函數(shù)可以指定希望連接的主機(jī)和端口。主機(jī)可以指定為InetAddress或String,端口始終指定為0到65535之間的int值。

Socket s=new Socket("127.0.0.1", 10001);//創(chuàng)建一個(gè)流套接字并將其連接到指定主機(jī)上的指定端口號(hào)

ServerSocket類實(shí)現(xiàn)服務(wù)器套接字。服務(wù)器套接字等待請(qǐng)求通過網(wǎng)絡(luò)傳入,它基于該請(qǐng)求執(zhí)行某些操作,然后向請(qǐng)求者返回結(jié)果。

ServerSocket ss=new ServerSocket(10001);//創(chuàng)建綁定到特定端口的服務(wù)器套接字

2、例子:TCP文件復(fù)制

  客戶端:

public class ClientDemo
{
	public static void main(String[] args) throws UnknownHostException, IOException
	  {
		Socket s=new Socket("127.0.0.1", 10004);
		BufferedReader buf = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\1.txt"));
		String line=null;
		/*PrintWriter out=new PrintWriter(s.getOutputStream(),true);
    while((line=buf.readLine())!=null)
    {
      out.println(line);
    }
    */
		BufferedWriter out=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		while((line=buf.readLine())!=null)
		    {
			out.write(line);
			out.newLine();
			out.flush();
		}
		s.shutdownOutput();
		BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
		String str=in.readLine();
		System.out.println(str);
		s.close();
		buf.close();
	}
}

服務(wù)器端:

public class ServerDemo
{
	public static void main(String[] args) throws IOException
	  {
		ServerSocket ss=new ServerSocket(10004);
		Socket s=ss.accept();
		BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
		String line=null;
		/*PrintWriter buf=new PrintWriter(new FileWriter("C:\\Users\\Administrator\\Desktop\\2.txt"),true);
    while((line=in.readLine())!=null)
    {  
      buf.println(line);
    }*/
		BufferedWriter buf=new BufferedWriter(new FileWriter("C:\\Users\\Administrator\\Desktop\\2.txt"));
		while((line=in.readLine())!=null)
		    {
			buf.write(line);
			buf.newLine();
			buf.flush();
		}
		PrintWriter out=new PrintWriter(s.getOutputStream(),true);
		out.println("傳輸成功!");
		ss.close();
		buf.close();
	}
}

四、Socket在瀏覽上的應(yīng)用

  我們可以在Eclipse中編寫服務(wù)器端,然后利用瀏覽器進(jìn)行訪問。

  eg、服務(wù)器端代碼為:

public class SocketServer
{
  public static void main(String[] args) throws IOException 
  {
    ServerSocket server=new ServerSocket(11000);
    Socket client=server.accept();
    PrintWriter out=new PrintWriter(client.getOutputStream(),true);
    out.println("你好!");
    server.close();
  }
}

然后打開IE瀏覽器,在地址中輸入http://192.168.1.120:11000/(192.168.1.120為本機(jī)IP地址),結(jié)果顯示為

在正常的應(yīng)用中,瀏覽器是向Tomacat服務(wù)器發(fā)出請(qǐng)求,以得到網(wǎng)頁圖片等資源。而tomca就是用Java寫的服務(wù)器端軟件。

  現(xiàn)在我們編寫服務(wù)器端為:

public class SocketServer
{
  public static void main(String[] args) throws IOException 
  {
    ServerSocket server=new ServerSocket(11000);
    Socket client=server.accept();
    PrintWriter out=new PrintWriter(client.getOutputStream(),true);
    BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
    String line=null;
    while((line=in.readLine())!=null)
      System.out.println(line);
    out.println("你好!");
    server.close();
  }
}

然后在利用瀏覽器訪問,可以看到瀏覽器(客戶端)發(fā)給服務(wù)器端的請(qǐng)求頭數(shù)據(jù)為:

利用上述原理,我們可以自己編寫類似IE的瀏覽器端(客戶端)軟件。首先在Tomcat的安裝目錄C:\apache-tomcat-7.0.62\webapps\myweb中添加一個(gè)demo.html資源,然后編寫客戶端,代碼如下:

public class ClientDemo
{
	public static void main(String[] args) throws UnknownHostException, IOException
	  {
		Socket s=new Socket("192.168.1.120",8080);
		PrintWriter out=new PrintWriter(s.getOutputStream(),true);
		//將請(qǐng)求頭發(fā)給服務(wù)器
		out.println("GET /myweb/demo.html HTTP/1.1");
		out.println("Accept:*/*");
		out.println("Host: 192.168.1.120:11000");
		out.println("Connection: Keep-Alive");
		//輸出空行,此步驟不可少
		out.println();
		BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
		String line=null;
		//返回服務(wù)器的響應(yīng)文件
		while((line=in.readLine())!=null)
		    {
			System.out.println(line);
		}
		s.close();
	}
}

接下來,啟動(dòng)Tomcat。即雙擊C:\apache-tomcat-7.0.62\bin中startup.bat文件。然后運(yùn)行上述客戶端代碼,此時(shí)可以看到Tomacat返回的響應(yīng)數(shù)據(jù):

總結(jié)

以上就是本文關(guān)于Java網(wǎng)絡(luò)編程之TCP通信完整代碼示例的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:

Java網(wǎng)絡(luò)編程基礎(chǔ)篇之單向通信

Java多線程編程實(shí)現(xiàn)socket通信示例代碼

Java多線程之線程通信生產(chǎn)者消費(fèi)者模式及等待喚醒機(jī)制代碼詳解

如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • Java實(shí)現(xiàn)定時(shí)任務(wù)的示例代碼

    Java實(shí)現(xiàn)定時(shí)任務(wù)的示例代碼

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)定時(shí)任務(wù)的相關(guān)知識(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-11-11
  • SpringBoot的@EnableAsync和@Async注解分析

    SpringBoot的@EnableAsync和@Async注解分析

    這篇文章主要介紹了SpringBoot的@EnableAsync和@Async注解分析,Spring Boot是一個(gè)快速開發(fā)框架,可以幫助開發(fā)人員快速構(gòu)建基于Spring的應(yīng)用程序,需要的朋友可以參考下
    2023-07-07
  • 關(guān)于logBack配置日志文件及編碼配置的問題

    關(guān)于logBack配置日志文件及編碼配置的問題

    這篇文章主要介紹了logBack配置日志文件及編碼配置的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • springboot整合Nginx實(shí)現(xiàn)負(fù)載均衡反向代理的方法詳解

    springboot整合Nginx實(shí)現(xiàn)負(fù)載均衡反向代理的方法詳解

    這篇文章主要給大家介紹了關(guān)于springboot整合Nginx實(shí)現(xiàn)負(fù)載均衡反向代理的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-01-01
  • Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文)

    Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文)

    這篇文章主要介紹了Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • IDEA actiBPM插件安裝圖文教程

    IDEA actiBPM插件安裝圖文教程

    這篇文章主要介紹了IDEA actiBPM插件安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 關(guān)于springboot 配置文件中屬性變量引用方式@@解析

    關(guān)于springboot 配置文件中屬性變量引用方式@@解析

    這篇文章主要介紹了關(guān)于springboot 配置文件中屬性變量引用方式@@解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Java多線程編程之讀寫鎖ReadWriteLock用法實(shí)例

    Java多線程編程之讀寫鎖ReadWriteLock用法實(shí)例

    這篇文章主要介紹了Java多線程編程之讀寫鎖ReadWriteLock用法實(shí)例,本文直接給出編碼實(shí)例,需要的朋友可以參考下
    2015-05-05
  • 通過Java添加Word文本框過程詳解

    通過Java添加Word文本框過程詳解

    這篇文章主要介紹了通過Java添加Word文本框過程詳解,在Word中,文本框是指一種可移動(dòng)、可調(diào)節(jié)大小的文字或圖形容器。我們可以向文本框中添加文字、圖片、表格等對(duì)象,下面,將通過Java編程來實(shí)現(xiàn)添加以上對(duì)象到Word文本框,需要的朋友可以參考下
    2019-07-07
  • Java源碼解析之超級(jí)接口Map

    Java源碼解析之超級(jí)接口Map

    今天給各位小伙伴介紹一下超級(jí)接口Map,文中對(duì)接口Map講的非常詳細(xì),對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助喲,需要的朋友可以參考下
    2021-05-05

最新評(píng)論

拜泉县| 新巴尔虎左旗| 霍邱县| 阳东县| 泰安市| 纳雍县| 汶川县| 临颍县| 金坛市| 山丹县| 上杭县| 衢州市| 石首市| 西峡县| 理塘县| 吉木萨尔县| 西青区| 斗六市| 宜城市| 云林县| 吴忠市| 仁布县| 甘洛县| 长治市| 威信县| 手游| 年辖:市辖区| 沙河市| 英德市| 汶上县| 大兴区| 永定县| 库车县| 浪卡子县| 鹿邑县| 吉木萨尔县| 桦南县| 安吉县| 峨眉山市| 塔城市| 普兰店市|