Java使用TCP實現數據傳輸實例詳解
TCP所提供服務的主要特點:
1.面向連接的傳輸;
2.端到端的通信;
3.高可靠性,確保傳輸數據的正確性,不出現丟失或亂序;
4.全雙工方式傳輸;
5.采用字節流方式,即以字節為單位傳輸字節序列;
6.緊急數據傳送功能。
TCP傳輸需要建立客戶端和服務器端,即Socket和Server Socket , 建立連接后,通過Socket中的IO流進行數據的傳輸 。傳輸結束后關閉Socket。
客戶端和服務器端是兩個獨立的應用程序。
以下是實現基本的TCP數據傳輸的Demo code:
package javase.day18; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class TransTextDemo { public static void main(String[] args) { } } class TcpClient2{ public static void main(String[] args) throws Exception{ System.out.println("client start..."); Socket s = new Socket("192.168.1.2",10005); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); String sendDataStr=null; while((sendDataStr=br.readLine())!=null){ if(sendDataStr.equals("bye")){ break; } bw.write(sendDataStr); bw.newLine(); bw.flush(); } bw.close(); } } class TcpServer2{ public static void main(String[] args) throws Exception{ System.out.println("server start..."); ServerSocket ss = new ServerSocket(10005); Socket s = ss.accept(); BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); String receiveDataStr=null; while((receiveDataStr=br.readLine())!=null){ if(receiveDataStr.equals("bye")){ break; } System.out.println("receive data:"+receiveDataStr); } } }
使用TCP實現文本文件上傳的Demo code:
package javase.day18; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class UploadText { public static void main(String[] args) { // TODO Auto-generated method stub } } class TextServer{ public static void main(String[] args) throws Exception{ System.out.println("Server start..."); ServerSocket ss = new ServerSocket(10008); Socket s = ss.accept(); BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); PrintWriter out = new PrintWriter(new FileWriter("C:\\java_test\\server.txt"),true); String line=null; while((line=br.readLine())!=null){ System.out.println(line); out.println(line); } PrintWriter pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream()),true); pw.println("upload successful"); pw.close(); s.close(); ss.close(); } } class TextClient{ public static void main(String[] args) throws Exception{ System.out.println("Client start..."); Socket clientSocket = new Socket("192.168.1.2",10008); BufferedReader br = new BufferedReader(new FileReader("C:\\java_test\\SystemDemo.java")); PrintWriter out = new PrintWriter(clientSocket.getOutputStream(),true); String line=null; while((line=br.readLine())!=null){ System.out.println(line); out.println(line); } clientSocket.shutdownOutput(); BufferedReader br2 = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String confirmMsgStr=br2.readLine(); System.out.println(confirmMsgStr); br2.close(); clientSocket.close(); } }
實現圖片上傳的Demo code:
package javase.day18; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.net.ServerSocket; import java.net.Socket; public class UploadImage { public static void main(String[] args) { } } class ImageClient{ public static void main(String[] args) throws Exception{ Socket imageClientSocket = new Socket("192.168.1.2",10010); BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\java_test\\client\\生活用品01.jpg")); BufferedOutputStream bos = new BufferedOutputStream(imageClientSocket.getOutputStream()); byte[] buf = new byte[1024*100]; int len = 0 ; while((len=bis.read(buf))!=-1){ bos.write(buf,0,len); } imageClientSocket.shutdownOutput(); BufferedInputStream bis2 = new BufferedInputStream(imageClientSocket.getInputStream()); byte[] buf2 = new byte[1024]; int len2 = 0 ; while((len2=bis2.read(buf2))!=-1){ System.out.println(new String(buf2,0,len2)); } bis.close(); imageClientSocket.close(); } } class ImageServer{ public static void main(String[] args) throws Exception{ ServerSocket ss = new ServerSocket(10010); Socket s = ss.accept(); BufferedInputStream bis = new BufferedInputStream(s.getInputStream()); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:\\java_test\\server\\生活用品01.jpg")); byte[] buf = new byte[1024*100]; int len = 0 ; while((len=bis.read(buf))!=-1){ bos.write(buf, 0, len); } BufferedOutputStream bos2 = new BufferedOutputStream(s.getOutputStream()); bos2.write("upload successful".getBytes()); bos2.close(); s.close(); ss.close(); } }
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。