Java使用TCP實(shí)現(xiàn)數(shù)據(jù)傳輸實(shí)例詳解
Java使用TCP實(shí)現(xiàn)數(shù)據(jù)傳輸實(shí)例詳解
TCP所提供服務(wù)的主要特點(diǎn):
1.面向連接的傳輸;
2.端到端的通信;
3.高可靠性,確保傳輸數(shù)據(jù)的正確性,不出現(xiàn)丟失或亂序;
4.全雙工方式傳輸;
5.采用字節(jié)流方式,即以字節(jié)為單位傳輸字節(jié)序列;
6.緊急數(shù)據(jù)傳送功能。
TCP傳輸需要建立客戶端和服務(wù)器端,即Socket和Server Socket , 建立連接后,通過Socket中的IO流進(jìn)行數(shù)據(jù)的傳輸 。傳輸結(jié)束后關(guān)閉Socket。
客戶端和服務(wù)器端是兩個(gè)獨(dú)立的應(yīng)用程序。
以下是實(shí)現(xiàn)基本的TCP數(shù)據(jù)傳輸?shù)腄emo 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實(shí)現(xiàn)文本文件上傳的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();
}
}
實(shí)現(xiàn)圖片上傳的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();
}
}
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- 實(shí)現(xiàn)了基于TCP的Java Socket編程實(shí)例代碼
- Java實(shí)現(xiàn)Socket的TCP傳輸實(shí)例
- Java基于Tcp協(xié)議的socket編程實(shí)例
- Java基于TCP方式的二進(jìn)制文件傳輸
- Java編程實(shí)現(xiàn)多線程TCP服務(wù)器完整實(shí)例
- 基于java TCP網(wǎng)絡(luò)通信的實(shí)例詳解
- Java網(wǎng)絡(luò)編程之TCP通信完整代碼示例
- JAVA編程實(shí)現(xiàn)TCP網(wǎng)絡(luò)通訊的方法示例
- Java面試基礎(chǔ)之TCP連接以及其優(yōu)化
相關(guān)文章
解決Springboot @WebFilter攔截器未生效問題
這篇文章主要介紹了解決Springboot @WebFilter攔截器未生效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10
Maven一鍵部署Springboot到Docker倉(cāng)庫為自動(dòng)化做準(zhǔn)備(推薦)
這篇文章主要介紹了Maven一鍵部署Springboot到Docker倉(cāng)庫,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
spring boot配置讀寫分離的完整實(shí)現(xiàn)步驟
數(shù)據(jù)庫配置主從之后,如何在代碼層面實(shí)現(xiàn)讀寫分離?所以下面這篇文章主要給大家介紹了關(guān)于spring boot配置讀寫分離的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2018-09-09
java發(fā)送post請(qǐng)求使用multipart/form-data格式文件數(shù)據(jù)到接口代碼示例
這篇文章主要介紹了java發(fā)送post請(qǐng)求使用multipart/form-data格式文件數(shù)據(jù)到接口的相關(guān)資料,文中指定了數(shù)據(jù)編碼格式為UTF-8,并強(qiáng)調(diào)了所需依賴工具類,需要的朋友可以參考下2024-12-12
從ElasticSearch中刪除數(shù)據(jù)的幾種常見方式
這篇文章主要給大家介紹了關(guān)于從ElasticSearch中刪除數(shù)據(jù)的幾種常見方式,在Elasticsearch中刪除數(shù)據(jù)可以通過刪除索引或刪除文檔兩種方式實(shí)現(xiàn),需要的朋友可以參考下2024-10-10
一次"java:程序包org.aspectj.lang不存在"問題解決實(shí)戰(zhàn)記錄
這篇文章主要給大家介紹了一次"java:程序包org.aspectj.lang不存在"問題解決的實(shí)戰(zhàn)過程,這個(gè)錯(cuò)誤提示意味著你的Java程序中引用了org.aspectj.lang這個(gè)包,但是該包并不存在,文章通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06

