通過 Socket 實現 TCP 程式設計入門
這裡我們通過一個使用者登入的例子來學習基於 TCP 協議的 Socket 通訊。
Socket 通訊模型
Socket通訊步驟
ServerSocket 構造器和成員方法
1、ServerSocket 構造方法
2、ServerSocket 成員方法
Socket 構造器和成員方法
1、Socket 構造器
2、Socket 成員方法
一個服務端和支援多個客戶端的對話demo
1、server.java
- package com.liuyanzhao;
- import java.io.*;
- import java.net.InetAddress;
- import java.net.ServerSocket;
- import java.net.Socket;
- /**
- *
- * 基於TCP協議的Socket通訊,實現使用者登入
- * 服務端
- * @author 言曌
- * @date 2017/12/4 下午7:37
- */
- public class Server {
- public static void main(String args[]) {
- try {
- //1、建立一個服務端Socket,即ServerSocket,指定繫結的埠,並監聽此埠
- ServerSocket serverSocket = new ServerSocket(8888);
- Socket socket = null;
- //記錄客戶端的數量
- int count = 0;
- //2、呼叫accept方法開始監聽,等待客戶端的連線
- System.out.println("***服務端即將啟動,等待客戶端的連線****");
- //迴圈監聽等待客戶端的連線
- while(true) {
- //呼叫accept()方法開始監聽,等待客戶端的連線
- socket = serverSocket.accept();
- //建立一個新的執行緒
- ServerThread serverThread = new ServerThread(socket);
- //啟動執行緒
- serverThread.start();
- count ++;//統計客戶端的數量
- System.out.println("客戶端的數量:"+count);
- InetAddress inetAddress = socket.getInetAddress();
- System.out.println("當前客戶端的IP:"+inetAddress.getHostAddress());
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
2、ServerThread.java
- package com.liuyanzhao;
- import java.io.*;
- import java.net.Socket;
- /**
- * 伺服器執行緒處理類
- * @author 言曌
- * @date 2017/12/4 下午8:32
- */
- public class ServerThread extends Thread {
- //本執行緒相關的Socket
- Socket socket = null;
- public ServerThread(Socket socket) {
- this.socket = socket;
- }
- //執行緒執行操作,響應客戶端的請求
- public void run() {
- InputStream inputStream = null;//字元輸入流
- InputStreamReader inputStreamReader = null;
- BufferedReader bufferedReader = null;
- OutputStream outputStream = null;
- PrintWriter printWriter = null;
- try {
- //獲取輸入流,並讀取客戶端資訊
- inputStream = socket.getInputStream();
- inputStreamReader = new InputStreamReader(inputStream);//將位元組流轉換成字元流
- bufferedReader = new BufferedReader(inputStreamReader);//為字元流新增快取
- String info = null;
- while((info = bufferedReader.readLine()) != null) {
- System.out.println("我是伺服器,客戶端說:"+info);
- }
- socket.shutdownInput();//關閉輸入流
- //獲取輸出流,響應客戶端的請求
- outputStream = socket.getOutputStream();
- printWriter = new PrintWriter(outputStream);
- printWriter.write("歡迎您!");
- printWriter.flush();//重新整理快取
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- //關閉資源
- try {
- if(bufferedReader != null) {
- bufferedReader.close();
- }
- if(outputStream != null) {
- outputStream.close();
- }
- if(inputStreamReader != null) {
- inputStreamReader.close();
- }
- if(inputStream != null) {
- inputStream.close();
- }
- if(socket != null) {
- socket.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
3、Client.java
- package com.liuyanzhao;
- import java.io.*;
- import java.net.Socket;
- /**
- * 客戶端
- * @author 言曌
- * @date 2017/12/4 下午7:37
- */
- public class Client {
- public static void main(String args[]) {
- try {
- //1、建立客戶端Socket,指定伺服器地址和埠
- Socket socket = new Socket("localhost",8888);
- //2、獲取輸出流,向伺服器端傳送資訊
- OutputStream outputStream = socket.getOutputStream();//位元組輸出流
- PrintWriter printWriter = new PrintWriter(outputStream);//將輸出流包裝為列印流
- printWriter.write("使用者名稱:Tom;密碼:123456");
- printWriter.flush();//重新整理快取,輸出資訊
- socket.shutdownOutput();//關閉輸出流
- //3、獲取輸入流,並讀取伺服器的響應資訊
- InputStream inputStream = socket.getInputStream();
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
- String info = null;
- while((info = bufferedReader.readLine()) != null) {
- System.out.println("我是客戶端,伺服器說:"+info);
- }
- //4、 關閉資源
- printWriter.close();
- bufferedReader.close();
- inputStream.close();
- outputStream.close();
- socket.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
上面的程式支援一個服務端和多個客戶端對話。
執行效果
1、先執行 Server 類
2、再執行 Client 類
服務端介面
客戶端介面
3、再執行一次 Client 類,再啟動一個客戶端
服務端介面
客戶端介面如上
本文參考:慕課網
相關文章
- 通過 Socket 實現 UDP 程式設計 入門UDP程式設計
- Socket程式設計入門(基於Java實現)程式設計Java
- Java:基於TCP協議網路socket程式設計(實現C/S通訊)JavaTCP協議程式設計
- java多執行緒實現TCP網路Socket程式設計(C/S通訊)Java執行緒TCP程式設計
- socket程式設計實現tcp伺服器_C/C++程式設計TCP伺服器C++
- Windows Socket程式設計精華《TCP通訊伺服器》Windows程式設計TCP伺服器
- 14.1 Socket 套接字程式設計入門程式設計
- Linux Socket C語言網路程式設計:TCP SocketLinuxC語言程式設計TCP
- JAVASE網路程式設計之TCP實現聊天通訊Java程式設計TCP
- python網路-Socket之TCP程式設計(26)PythonTCP程式設計
- socket程式設計在TCP中的應用程式設計TCP
- 網路程式設計-Socket通訊程式設計
- Java實現TCP通訊程式JavaTCP
- C語言透過socket實現TCP客戶端C語言TCP客戶端
- socket程式設計實戰程式設計
- UDP協議網路Socket程式設計(java實現C/S通訊案例)UDP協議程式設計Java
- (3)Tcp Socket程式設計的封裝類 TcpListener/TcpClientTCP程式設計封裝client
- Socket程式設計,從TCP分析到建立web網站程式設計TCPWeb網站
- 基於TCP協議的Socket網路程式設計( )TCP協議程式設計
- WWDC 2018:Network.framework 入門,現代化 Socket 程式設計的新選擇Framework程式設計
- 《初識TCP》iOS、macOS實現socket client與socket serverTCPiOSMacclientServer
- 基於TCP/UDP的Socket程式設計,HTTP/HTTPS協議TCPUDP程式設計HTTP協議
- 基於Java的Socket類Tcp網路程式設計實現實時聊天互動程式(一):QQ聊天介面的搭建JavaTCP程式設計
- SOCKET程式設計程式設計
- Linux學習/TCP Socket通訊LinuxTCP
- Zsh 開發指南(第十七篇 使用 socket 檔案和 TCP 實現程式間通訊)TCP
- 深入解析dio(一) Socket 程式設計實現本地多端群聊程式設計
- TCP併發伺服器的程式設計實現TCP伺服器程式設計
- Socket程式設計模型程式設計模型
- Java Socket程式設計Java程式設計
- socket程式設計(1)程式設計
- Python socket程式設計Python程式設計
- Go 語言使用.NET 包實現 Socket 網路程式設計Go程式設計
- 入門程式碼程式設計程式設計
- Python網路程式設計實現TCP和UDP連線Python程式設計TCPUDP
- 《Python程式設計:從入門到實踐》Python程式設計
- C# 實現socket通訊程式(伺服器端)C#伺服器
- Shell 程式設計入門程式設計