JAVA TCP/IP網絡通訊編程(二)

一個實例通過client端和server端通訊

客戶端通過TCP/IP傳輸資源文件,比如圖片,文字,音頻,視頻等.....

服務端接受到文件存入本地磁盤,返回接受到:“收到來自于"+s.getInetAddress().getHostName()+"的信息”

?

TestTCP3:

附源碼:

package com.ykw.net;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

import org.junit.Test;

//TCP編程例三:從客戶端發送文件給服務端,服務端保存到本地。并返回"發送成功"給客戶端。并關閉相應的連接
public class TestTCP3 {

?? ?@Test
?? ?public void client()throws Exception{
?? ??? ?//1.創建Socket的對象
?? ??? ?Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9898);
?? ??? ?//2.從本地獲取一個文件發送給服務端
?? ??? ?OutputStream os = socket.getOutputStream();
?? ??? ?FileInputStream fis = new FileInputStream(new File("1.jpg"));
?? ??? ?byte[] b = new byte[1024];
?? ??? ?int len;
?? ??? ?while((len=fis.read(b))!=-1){
?? ??? ??? ?os.write(b,0,len);
?? ??? ?}
?? ??? ?socket.shutdownOutput();
?? ??? ?//3.接受來自于服務端的信息
?? ??? ?InputStream is = socket.getInputStream();
?? ??? ?byte[] b1 = new byte[1024];
?? ??? ?int len1;
?? ??? ?while((len1 = is.read(b1))!=-1){
?? ??? ??? ?String str = new String(b1,0,len1);
?? ??? ??? ?System.out.println(str);
?? ??? ?}
?? ??? ?//4.關閉相應的流和Socket對象
?? ??? ?is.close();
?? ??? ?os.close();
?? ??? ?fis.close();
?? ??? ?socket.close();
?? ?}
?? ?
?? ?@Test
?? ?public void server()throws Exception{
?? ??? ?//1.創建一個ServerSocket對象
?? ??? ?ServerSocket ss = new ServerSocket(9898);
?? ??? ?//2.調用其accept()方法,返回一個Socket對象
?? ??? ?Socket s = ss.accept();
?? ??? ?//3.將從客戶端發送過來的信息保存到本地
?? ??? ?InputStream is = s.getInputStream();
?? ??? ?FileOutputStream fos = new FileOutputStream(new File("D://5.jpg"));
?? ??? ?byte[] b = new byte[1024];
?? ??? ?int len;
?? ??? ?while((len = is.read(b))!=-1){
?? ??? ??? ?fos.write(b,0,len);
?? ??? ?}
?? ??? ?System.out.println("收到來自于"+s.getInetAddress().getHostAddress()+"的文件");
?? ??? ?//4.發送“接收成功”的信息反饋給客戶端
?? ??? ?OutputStream os = s.getOutputStream();
?? ??? ?os.write("您發送的圖片我已接收成功".getBytes());
?? ??? ?//5.關閉相應的流和Socket及ServerSocket的對象
?? ??? ?os.close();
?? ??? ?fos.close();
?? ??? ?is.close();
?? ??? ?s.close();
?? ??? ?ss.close();
?? ?}
}

轉載于:https://www.cnblogs.com/yukewei/p/5041165.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256269.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256269.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256269.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C#中json序列化與反序列化

json格式概念 JSON(JavaScript Object Notation) 是一種輕量級的數據傳輸格式,其采用完全獨立于語言的文本格式,使JSON成為理想的數據交換語言。 json由兩種格式組成。 1.名稱/值”對的集合,可以一起創建多個"名稱 / 值對"。 { “…

volley用法之 以post方式發送 json 參數

需求是這樣 我們需要發送一個post請求向服務器要參數。要求是發送的post參數也要是json格式。 簡單一點的是這樣的: 如果要發送的是這樣簡單的json格式,我們可以簡單的使用map來實現: RequestQueue requestQueue Volley.newRequestQueue(get…

我的友情鏈接

小小忍者Tab轉載于:https://blog.51cto.com/12737170/2043087

JAVA 文件編譯執行與虛擬機(JVM)簡單介紹

詳見:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytpo3 java程序的內存分配 JAVA 文件編譯執行與虛擬機(JVM)介紹 Java 虛擬機(JVM)是可運行Java代碼的假想計算機。只要根據JVM規格描述將解釋器移植到特定的計算機上,就能保證經過編譯的任…

C#中數據流(文件流、內存流、網絡流等)相關知識點梳理

基本概念 C#中數據流的應用體現在方方面面,現在針其常用的幾種類進行一次梳理。 數據流包括文件流(FileStream)、內存流(MemoryStream)、網絡流(NetworkStream)以及讀寫流如StreamReader、StreamWriter、BinaryReader和BinaryWriter等。 數據流是什么? …

dns服務 很多問題,后續再研究

慕課網:http://www.imooc.com/video/5220 參考:http://jingyan.baidu.com/article/870c6fc32c028eb03fe4be30.html http://www.tuicool.com/articles/aUNzMfi http://www.07net01.com/linux/dnszhucongfuzhijiquyuchuansong_505144_1373161402.html http…

LINUX下用腳本實現JDK+TOMCAT

這幾天真是累。常常下半夜3點睡覺。是因為這段時間對LINUX下的SHELL編程喜歡上了。 一時弄的忘了睡覺。還好,累沒白累。遍寫了一個JDKTOMCAT的自動安裝,配置的腳本 在這里我把配置出來的成果拿來和大家分享一下。希望有高手來指定一下,我在編…

【圖像處理】——圖像增強Python實現直方圖均衡化

目錄 一、相關概念 1、灰度直方圖概念(hist) 2、灰度概率累積函數(cdf) 3、灰

C#常見編碼方式總結

一、概念 我們知道計算機是基于二進制來表示數據的,那么對于字母和漢字等字符用二進制如何表示? 這就需要用一種編碼方式將這些字母或者符號轉換二進制表示。首先需要對字符集進行編碼表示,每個編碼代表一個固定的字符,然后再將字…

Spring中ApplicationContext加載機制

詳見:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp33 加載器目前有兩種選擇:ContextLoaderListener和ContextLoaderServlet。 這兩者在功能上完全等同,只是一個是基于Servlet2.3版本中新引入的Listener接口實現,…

Codeforces 724 C. Ray Tracing

Codeforces 724 C. Ray Tracing 題目來源 codeforces 題意: 有一些傳感器按輸入坐標分布在圖上,有一道光從(0,0)沿45角出射,遇到邊按反射法則反射,遇到角落結束。 問每一個點被經過的時間,并按照輸入順序輸出。題解&am…

CDN架構以及原理分析

詳見: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp61 在不同地域的用戶訪問網站的響應速度存在差異,為了提高用戶訪問的響應速度、優化現有Internet中信息的流動,需要在用戶和服務器間加入中間層CDN. 使用戶能以最快的速度,從最接近用…

基于VS2019的Eigen庫安裝詳解

概念 Eigen是一個C開源線性代數庫,以提供有關矩陣的的線性代數運算,解方程等功能。Eigen在很多領域如信號處理,圖像處理,深度學習等起到重要作用,學習其操作方法,可以靈活的對線性代數、矩陣和矢量將進行計…

【圖像處理】——Python圖像分割邊緣檢測算法之二階梯度算子(laplace、log、dog算子)

目錄 一、二階算子簡介 二、laplace(拉普拉斯算子) 1、什么是拉普拉斯算子

C#中不常見的運算符功能匯總

介紹 C#有很多運算符,可分為以下幾種:算數運算符,比較運算符,條件運算符,賦值運算符,邏輯運算符。下面對不常見的運算符進行匯總。 概念 條件運算符 ?(可空類型修飾符) 引用類型可以使用空引用表示一…

SQL Server2012中如何通過bak文件還原SQL Server2012數據庫

1 登陸完數據庫后,不要新建數據庫,直接點擊“數據庫”然后右擊"還原數據庫"。 2 在"源"選項中選擇"設備"。 3 選擇相應的bak文件并進行添加。 4 添加完之后點擊確定,注意在目標這一欄中數據庫名稱都可以不用寫…

【圖像處理】——Python OpenCV實現形態學膨脹、腐蝕開閉操作(可以用于圖像濾波、圖像分割等)

轉載博客請注明詳細地址,謝謝本文講了形態學基本操作膨脹腐蝕開閉操作的原理本文講解了用OpenCV-Python實現形態學操作目錄 一、形態學簡述 1、簡介 2、一些基本定義 3、結構元素

thrift服務windows環境編譯失敗

為什么80%的碼農都做不了架構師&#xff1f;>>> 修改maven的pom文件 <!--thrift服務 api 層&#xff0c;開發時 windows系統需指定exe程序位置--> <properties> <thrift.exe.path>E:/Thrift/thrift-0.9.3.exe</thrift.exe.path&g…

編譯包含Google Play服務App的SDK版本問題

編譯包含Google Play服務App的SDK版本問題 錯誤信息&#xff1a;No Resouce identifier found for attribute ‘touchscreen BlocksFocus’ in package ‘android’這個錯誤通常是App引用了Google Play時候發生。Xamarin編譯該類App&#xff0c;需要目標SDK版本必須是21或者更高…