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 , 建立連接后,通過(guò)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)文章
Java如何調(diào)用wsdl的webservice接口
這篇文章主要介紹了Java如何調(diào)用wsdl的webservice接口問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
IDEA @SpringBootApplication報(bào)錯(cuò)原因及解決
這篇文章主要介紹了IDEA @SpringBootApplication報(bào)錯(cuò)原因及解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Java數(shù)組隊(duì)列概念與用法實(shí)例分析
這篇文章主要介紹了Java數(shù)組隊(duì)列概念與用法,結(jié)合實(shí)例形式分析了Java數(shù)組隊(duì)列相關(guān)概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-03-03
重寫(xiě)hashCode()和equals()方法詳細(xì)介紹
這篇文章主要介紹了重寫(xiě)hashCode()和equals()方法詳細(xì)介紹,涉及重寫(xiě)equals()方法,重寫(xiě)hashCode()方法,重寫(xiě)equals()而不重寫(xiě)hashCode()的風(fēng)險(xiǎn)等相關(guān)內(nèi)容的介紹,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
Java實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出數(shù)據(jù)庫(kù)的方法示例
這篇文章主要介紹了Java實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出數(shù)據(jù)庫(kù)的方法,結(jié)合實(shí)例形式分析了java針對(duì)Excel的讀寫(xiě)及數(shù)據(jù)庫(kù)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-08-08
Spring Boot使用Spring的異步線程池的實(shí)現(xiàn)
這篇文章主要介紹了Spring Boot使用Spring的異步線程池的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
Java迭代器實(shí)現(xiàn)Python中的range代碼實(shí)例
這篇文章主要介紹了Java迭代器實(shí)現(xiàn)Python中的range代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
全面解析JPA?倉(cāng)庫(kù)repository中的findAll()方法
這篇文章主要介紹了全面解析JPA?倉(cāng)庫(kù)repository中的findAll()方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
使用springboot 獲取控制器參數(shù)的幾種方法小結(jié)
這篇文章主要介紹了使用springboot 獲取控制器參數(shù)的幾種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12

