Java Socket入門


Java Socket底層采用TCP/IP協議通信,通信細節被封裝,我們僅僅需要指定IP、端口,便能輕易地創建TCP或UDP連接,進行網絡通信。數據的讀寫,可以使用我們熟悉的stream進行操作。

TCP通信中,服務端與客戶端是一對多的關系,如下圖

Client發起連接請求后,Server端響應並創建一個Socket實例,與Client端一對一通信。通信完畢后,Client端與Server端的Socket實例各自關閉連接並銷毀,此次通信結束。

發起連接的三次握手和關閉連接的四次揮手過程暫且不表,后續文章詳細介紹。下面看具體代碼

服務端代碼

package com.coshaho.learn.socket;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * SocketServer.java Create on 2017年12月16日 下午11:42:03    
 * 類功能說明:   socket服務端
 * @Author coshaho
 */
public class SocketServer 
{
    public static void main(String[] args) throws Exception 
    {
        // 創建服務端
        ServerSocket server = new ServerSocket(10000);
        
        // 服務端阻塞式監聽客戶端連接請求
        // 接收到連接請求,則創建一個socket實例,與客戶端通信
        Socket client = server.accept();
        
        // 獲取InputStream讀取數據
        InputStream in = client.getInputStream();
        byte[] b = new byte[1024];
        // 客戶端關閉輸出流后服務端會讀取到-1標志
        while(-1 != in.read(b))
        {
            System.out.println(new String(b));
        }
       
        // 獲取OutputStream輸出數據
        OutputStream out = client.getOutputStream();
        out.write("hello, client".getBytes());
        // 輸出結束,關閉輸出流
        client.shutdownOutput();
       
        System.out.println("Server close. " + System.currentTimeMillis());
        server.close();
    }
}

 

 客戶端代碼

package com.coshaho.learn.socket;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/**
 * SocketClient.java Create on 2017年12月16日 下午11:42:53    
 * 類功能說明:   socket客戶端
 * @Author coshaho
 */
public class SocketClient 
{
    public static void main(String[] args) throws Exception 
    {
        // 請求連接服務端,握手成功,返回Socket實例
        Socket client = new Socket("127.0.0.1",10000);
        
        // 獲取輸入輸出流,讀寫數據(與服務端數據讀寫操作相同)
        InputStream in = client.getInputStream();
        OutputStream out = client.getOutputStream();
        
        out.write("hello, server".getBytes());
        client.shutdownOutput();
        
        byte[] b = new byte[1024];
        while(-1 != in.read(b))
        {
            System.out.println(new String(b));
        }
        
        System.out.println("Client close. " + System.currentTimeMillis());
        client.close();
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM