JAVA編程實現(xiàn)TCP網絡通訊的方法示例
本文實例講述了JAVA編程實現(xiàn)TCP網絡通訊的方法。分享給大家供大家參考,具體如下:
TCP(Transmission Control Protocol 傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。
由IETF的RFC 793定義,在簡化的計算機網絡OSI模型中,它完成第四層傳輸層所指定的功能。
基于TCP網絡通訊實現(xiàn)的類主要有服務器端的ServerSocket用客戶端的Socket。
通訊流程:
打開服務器,等待客戶端連接-->客戶端連接上服務器-->數(shù)據通訊。
代碼實現(xiàn)步驟:
1. 創(chuàng)建服務器端(ServerSocket)對象或客戶端(Socket)對象。
2. 建立起服務器與客戶端連接
3. 通過輸入輸出流進行文件(數(shù)據)通訊
4. 通訊結束 ,關閉資源 。
一個簡單的小例子,服務端:
public class SocketServer {
public static void main(String[] args) {
try {
// 創(chuàng)建一個服務器ServerSocket,并指定端口號為5120
ServerSocket mServerSocket = new ServerSocket(5120);
// 等待客戶端連接
Socket socket = mServerSocket.accept();
// 連接上客戶端后,獲取客戶端輸入流信息
InputStream is = socket.getInputStream();
// 通過獲取緩沖數(shù)據方式來讀取文本信息
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// 獲取文本信息
String line;
StringBuffer sb = new StringBuffer();
while ((line = br.readLine()) != null) {
sb.append(line);
}
System.out.println(sb.toString());
socket.shutdownInput();
// 收到客戶端信息后,回復客戶端信息
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("收到回復,我是服務端");
pw.flush();
// 關閉流通常放在finally中操作
os.close();
br.close();
is.close();
pw.close();
socket.close();
mServerSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客戶端:
public class ClientSocket {
public static void main(String[] args) {
try {
// 創(chuàng)建客戶端Socket,指定主機和端口
Socket mSocket = new Socket("localhost", 5120);
// 通過輸入流向服務器發(fā)數(shù)據
OutputStream os = mSocket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("來自客戶端Socket的數(shù)據,你收到了嗎?");
pw.flush();
mSocket.shutdownOutput();
// 收取服務端的回復信息
InputStream is = mSocket.getInputStream();
// 通過獲取緩沖數(shù)據方式來讀取文本信息
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// 獲取文本信息
String line;
StringBuffer sb = new StringBuffer();
while ((line = br.readLine()) != null) {
sb.append(line);
}
System.out.println(sb.toString());
// 關閉流通常放在finally中操作
br.close();
is.close();
pw.close();
os.close();
mSocket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
運行時,要先啟動服務端,然后啟動客記戶端,通常網絡通訊會與多線程交織在一起。
更多關于java相關內容感興趣的讀者可查看本站專題:《Java Socket編程技巧總結》、《Java文件與目錄操作技巧匯總》、《Java數(shù)據結構與算法教程》、《Java操作DOM節(jié)點技巧總結》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設計有所幫助。
相關文章
解決idea中Springboot找不到BASE64Encoder或Decoder的jar包
這篇文章主要介紹了解決idea中Springboot找不到BASE64Encoder或Decoder的jar包,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12
SpringBoot之@ConditionalOnProperty注解使用方法
在平時業(yè)務中,我們需要在配置文件中配置某個屬性來決定是否需要將某些類進行注入,讓Spring進行管理,而@ConditionalOnProperty能夠實現(xiàn)該功能,文中有詳細的代碼示例,需要的朋友可以參考下2023-05-05
MyBatis-Plus中如何實現(xiàn)動態(tài)表名
這篇文章主要介紹了MyBatis-Plus中如何實現(xiàn)動態(tài)表名問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07

