Java實(shí)現(xiàn)Socket的TCP傳輸實(shí)例
本文實(shí)例講述了Java實(shí)現(xiàn)Socket的TCP傳輸。分享給大家供大家參考。具體分析如下:
客戶端發(fā)數(shù)據(jù)到服務(wù)端
* Tcp傳輸,客戶端建立的過(guò)程。
* 1,創(chuàng)建tcp客戶端socket服務(wù)。使用的是Socket對(duì)象。
* 建議該對(duì)象一創(chuàng)建就明確目的地。要連接的主機(jī)。
* 2,如果連接建立成功,說(shuō)明數(shù)據(jù)傳輸通道已建立。
* 該通道就是socket流 ,是底層建立好的。 既然是流,說(shuō)明這里既有輸入,又有輸出。
* 想要輸入或者輸出流對(duì)象,可以找Socket來(lái)獲取。
* 可以通過(guò)getOutputStream(),和getInputStream()來(lái)獲取兩個(gè)字節(jié)流。
* 3,使用輸出流,將數(shù)據(jù)寫(xiě)出。
* 4,關(guān)閉資源。
package com.socket.tcp.demo;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientDemo {
/**
* @param args
* @throws IOException
* @throws UnknownHostException
*/
public static void main(String[] args) throws UnknownHostException, IOException {
//客戶端發(fā)數(shù)據(jù)到服務(wù)端
/*
* Tcp傳輸,客戶端建立的過(guò)程。
* 1,創(chuàng)建tcp客戶端socket服務(wù)。使用的是Socket對(duì)象。
* 建議該對(duì)象一創(chuàng)建就明確目的地。要連接的主機(jī)。
* 2,如果連接建立成功,說(shuō)明數(shù)據(jù)傳輸通道已建立。
* 該通道就是socket流 ,是底層建立好的。 既然是流,說(shuō)明這里既有輸入,又有輸出。
* 想要輸入或者輸出流對(duì)象,可以找Socket來(lái)獲取。
* 可以通過(guò)getOutputStream(),和getInputStream()來(lái)獲取兩個(gè)字節(jié)流。
* 3,使用輸出流,將數(shù)據(jù)寫(xiě)出。
* 4,關(guān)閉資源。
*/
//創(chuàng)建客戶端socket服務(wù)。
//連接目標(biāo)服務(wù)器的地址,192.168.1.100是目標(biāo)服務(wù)器的地址,10002是目標(biāo)服務(wù)器的端口
Socket socket = new Socket("192.168.1.100",10002);
//獲取socket流中的輸出流。 向服務(wù)器輸出消息,即發(fā)消息到服務(wù)器
OutputStream out = socket.getOutputStream();
//使用輸出流將指定的數(shù)據(jù)寫(xiě)出去。
out.write("tcp演示:哥們又來(lái)了!".getBytes());
//關(guān)閉資源。
socket.close();
}
}
服務(wù)端接收客戶端發(fā)送過(guò)來(lái)的數(shù)據(jù),并打印在控制臺(tái)上。
* 建立tcp服務(wù)端的思路:
* 1,創(chuàng)建服務(wù)端socket服務(wù)。通過(guò)ServerSocket對(duì)象。
* 2,服務(wù)端必須對(duì)外提供一個(gè)端口,否則客戶端無(wú)法連接。
* 3,獲取連接過(guò)來(lái)的客戶端對(duì)象。
* 4,通過(guò)客戶端對(duì)象獲取socket流讀取客戶端發(fā)來(lái)的數(shù)據(jù)
* 并打印在控制臺(tái)上。
* 5,關(guān)閉資源。關(guān)客戶端,關(guān)服務(wù)端。
package com.socket.tcp.demo;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
//UDP:發(fā)送端、接收端 (無(wú)連接)
//TCP:客戶端、服務(wù)端 (要連接)先啟動(dòng)服務(wù)端,在啟動(dòng)客戶端
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//服務(wù)端接收客戶端發(fā)送過(guò)來(lái)的數(shù)據(jù),并打印在控制臺(tái)上。
/*
* 建立tcp服務(wù)端的思路:
* 1,創(chuàng)建服務(wù)端socket服務(wù)。通過(guò)ServerSocket對(duì)象。
* 2,服務(wù)端必須對(duì)外提供一個(gè)端口,否則客戶端無(wú)法連接。
* 3,獲取連接過(guò)來(lái)的客戶端對(duì)象。
* 4,通過(guò)客戶端對(duì)象獲取socket流讀取客戶端發(fā)來(lái)的數(shù)據(jù)
* 并打印在控制臺(tái)上。
* 5,關(guān)閉資源。關(guān)客戶端,關(guān)服務(wù)端。
*/
//1創(chuàng)建服務(wù)端對(duì)象。
ServerSocket ss = new ServerSocket(10002);
//監(jiān)聽(tīng)?wèi)?yīng)用所在服務(wù)器的10002端口,
//看有沒(méi)有客戶端連接過(guò)來(lái),或者發(fā)送消息
//2,獲取連接過(guò)來(lái)的客戶端對(duì)象。
Socket s = ss.accept();//阻塞式.
String ip = s.getInetAddress().getHostAddress();
//獲取連接過(guò)來(lái)客戶端的IP地址
//3,通過(guò)socket對(duì)象獲取輸入流,要讀取客戶端發(fā)來(lái)的數(shù)據(jù),
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
String text = new String(buf,0,len);
System.out.println(ip+":"+text);
s.close();
ss.close();//關(guān)閉服務(wù)器,理論上是不用關(guān)的
}
}
運(yùn)行效果圖:(先啟動(dòng)服務(wù)端,后啟動(dòng)客戶端)


希望本文所述對(duì)大家的java程序設(shè)計(jì)有所幫助。
- 實(shí)現(xiàn)了基于TCP的Java Socket編程實(shí)例代碼
- java實(shí)現(xiàn)一個(gè)簡(jiǎn)單TCPSocket聊天室功能分享
- Java基于Tcp協(xié)議的socket編程實(shí)例
- java實(shí)現(xiàn)基于Tcp的socket聊天程序
- Java通過(guò) Socket 實(shí)現(xiàn) TCP服務(wù)端
- java實(shí)現(xiàn)基于UDP協(xié)議網(wǎng)絡(luò)Socket編程(C/S通信)
- java Socket UDP實(shí)例詳解
- Java基于socket服務(wù)實(shí)現(xiàn)UDP協(xié)議的方法
- java實(shí)現(xiàn)TCP socket和UDP socket的實(shí)例
相關(guān)文章
Mybatis分頁(yè)的實(shí)現(xiàn)及使用注解開(kāi)發(fā)操作
這篇文章主要介紹了Mybatis分頁(yè)的實(shí)現(xiàn)及使用注解開(kāi)發(fā)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
java實(shí)現(xiàn)二維碼掃碼授權(quán)登陸
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)二維碼掃碼授權(quán)登陸,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10
詳解SpringBoot 應(yīng)用如何提高服務(wù)吞吐量
這篇文章主要介紹了Spring Boot 應(yīng)用如何提高服務(wù)吞吐量,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
SpringBoot實(shí)現(xiàn)微信及QQ綁定登錄的示例代碼
本文主要介紹了SpringBoot實(shí)現(xiàn)微信及QQ綁定登錄的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
SpringCloud Zuul在何種情況下使用Hystrix及問(wèn)題小結(jié)
這篇文章主要介紹了SpringCloud Zuul在何種情況下使用Hystrix 及問(wèn)題小結(jié),感興趣的朋友跟隨小編一起看看吧2018-11-11
解析阿里一面CyclicBarrier和CountDownLatch的區(qū)別
這篇文章主要介紹了阿里一面CyclicBarrier和CountDownLatch的區(qū)別是啥,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
Spring FreeMarker整合Struts2過(guò)程詳解
這篇文章主要介紹了Spring FreeMarker整合Struts2過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10

