1. 程式人生 > >java網路程式設計tcp協議之setSoLinger

java網路程式設計tcp協議之setSoLinger

setSoLinger是當socket在關閉時對當前未傳送給對方資料的一種控制方式。

1、setSoLinger(true, 0),表示不管當前有沒有還未傳送給對方的資料就直接關閉連結。

2、setSoLinger(true, 1),表示等待1秒如果還有未傳送給對方的資料也直接關閉連結。

3、setSoLinger(false, -1),表示無論如何都等未傳送給對方的資料傳送完畢才按照4次揮手的過程正常關閉連結。

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketTest {

    public static void main(String[] args) throws Exception {
        new Thread() {
            public void run() {
                try {
                    server();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();
        startClient();
    }

    public static void startClient() throws Exception {

        Socket s = new Socket();
        InetSocketAddress i = new InetSocketAddress(7777);
        try {
            s.connect(i);
            s.setSoLinger(true, 0);
            Thread.sleep(1000);
            s.getOutputStream().write(new byte[1000000]);
            s.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public static void server() throws Exception {
        ServerSocket ss = new ServerSocket(7777, 5);
        Socket s = ss.accept();
        try {
            InputStream in = s.getInputStream();
            BufferedInputStream bi = new BufferedInputStream(in);
            byte[] buf = new byte[1024];
            int read = -1;
            long total = 0;
            while ((read = bi.read(buf)) != -1) {
                total += read;
            }
            System.out.println("共讀取位元組數為:" + total);
            s.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
上面的程式碼表示第一種情況,服務端在讀取資料時會發生如下連線異常:

相關推薦

java網路程式設計tcp協議setSoLinger

setSoLinger是當socket在關閉時對當前未傳送給對方資料的一種控制方式。 1、setSoLinger(true, 0

java網路程式設計tcp協議backlog引數詳解

backlog是ServerSocket類中的引數,用來指定ServerSocket中等待客戶端連線佇列的最大數量,並且每呼叫一次

java網路程式設計tcp協議setSoTimeout

該引數表明了socket從輸入流獲取資料的超時時間以毫秒為單位,只要雙方建立了連線不管是服務端還是客戶端,也不管對方有沒有往輸入流

java網路程式設計tcp協議setKeepAlive

keepAlive是socket連線在沒有資料交換時用來探測連線是否存活的一種心跳機制。當然也可以自己實現心跳機制而不使用自帶的功

Java網路程式設計TCP協議傳送接收資料

一、客戶端傳送,伺服器端接收 package net; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; /* * TC

java 網路程式設計——TCP 的三次握手和四次揮手

文章目錄 TCP報頭 三次握手 未連線佇列 四次揮手 狀態詳解 在TCP/IP協議中,TCP協議提供可靠的連線服務,採用三次握手建立一個連線. TCP報頭 埠號:用來標識

python網路程式設計 TCP協議 TCP與UDP的區別

TCP(Transmission Control Protocol)簡稱傳輸控制協議,它是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議。 建立TCP通訊三個步驟: 建立連線 資料傳送 終止連線 TCP通訊類似於生活中的打電話,通訊開始前一定要先建立相關的連線。

Java網路程式設計-HTTP協議

HTTP協議的定義 這篇文章暫時不研究HTTP底層的TCP/IP的握手和揮手過程,只從表面的互動流程分析HTTP協議。 HTTP英文全稱是Hypertext Transfer Protpcol,也就是超文字傳輸協議。HTTP是一個標準,定義了Web客戶端如何與伺服器對話以及資料如何從伺服器傳回到客戶端。在日常

Python網路程式設計--tcp應用http傳輸--HttpServer V1.0

按照HTTP協議的請求和響應格式,完成一次資料請求和響應。 from socket import * def handleclient(connfd): request=connfd.recv(4096) # print(request) #將request請求按行分隔

java-網路程式設計(TCP-服務端響應客戶端)

 網路程式設計詳解-TCP   一,TCP協議的特點               面向連線的協議(有傳送端就一定要有接收端)       

java網路程式設計+通訊協議

網路程式設計對於很多的初學者來說,都是很嚮往的一種程式設計技能,但是很多的初學者卻因為很長一段時間無法進入網路程式設計的大門而放棄了對於該部分技術的學習。 在 學習網路程式設計以前,很多初學者可能覺得網路程式設計是比較複雜的系統工程,需要了解很多和網路相關的基礎知識,其

Java 網路程式設計 UDP協議

網路程式設計 TCP/IP協議:多臺計算機網路連線的規則 包括:TCP協議、IP協議、UDP協議和其它協議的協議組 層次結構: 鏈路層:鏈路層是用於定義物理傳輸通道,通常是對某些網路連線裝置的驅動協議,例如針對光纖、網線提供的驅動。硬體方面的 網路層:網路層是整個TCP/IP協議的核心,它主要用於將

Java網路程式設計UDP協議傳送接收資料

UDP協議傳送資料步驟 A:建立傳送端socket物件; B:建立資料,並把資料打包; C:呼叫socket物件的傳送方法傳送資料包; D:釋放資源 package net; import java.io.IOException; import java.net.Datagra

網路程式設計------TCP協議網路程式

        在網路程式設計------UDP協議網路程式一文中編寫了根據傳輸層的UDP協議來進行伺服器與客戶端通訊的程式碼,並介紹了相關的概念。在本文中將編寫基於TCP協議的伺服器與客戶端通訊程式碼。並對比TCP與UDP協議之間的差別。下面先介紹TCP協議。TCP協議  

java網路程式設計TCP傳輸—流操作—拿到源後的寫入動作

在網路程式設計中的TCP傳輸裡,拿到Socket的源後,應該怎麼進行讀寫操作呢,下面我列舉了兩種方法,希望大家幫忙補充···· 1.利用byte陣列作為一個緩衝區進行讀寫 客戶端上傳 1 //獲取

『黑馬程式設計師』---java--網路程式設計--TCP基礎

----------- android培訓、java培訓、java學習型技術部落格、期待與您交流! ------------ TCP傳輸 ✔Socket和ServerSocket ✔建立客戶端和服務端 ✔建立連線後,通過Socket中的IO流進行資料的傳輸 ✔關閉Socke

Java 網路程式設計 TCP協議

TCP協議 (伺服器端程先啟動,等待客戶端連線)   TCP協議是面向連線的通訊協議,即在傳輸資料前先在傳送端和接收端建立邏輯連線,然後再傳輸資料 保證傳輸資料的全性安,檔案資料不易丟失   在JDK中提供了兩個類用於實現TCP程式,一個是ServerSocket類,用於表示伺

Java網路程式設計7.TCP網路程式設計客戶端鍵盤錄入伺服器控制檯輸出

TCP網路程式設計之客戶端鍵盤錄入伺服器控制檯輸出 1、鍵盤錄入資料 BufferedReader br = new BufferedReader(new InputStreamReader(S

Java網路程式設計入門(五)TCP程式設計——複用Socket連線

如何複用Socket連線? 在前面的示例中,客戶端中建立了一次連線,只發送一次資料就關閉了,這就相當於撥打電話時,電話打通了只對話一次就關閉了,其實更加常用的應該是撥通一次電話以後多次對話,這就是複用客戶端連線。 那 麼如何實現建立一次連線,進行多次資料交換呢?其實很簡單

Java網路程式設計入門(八)網路協議

 網路協議          對於需要從事網路程式設計的程式設計師來說,網路協議是一個需要深刻理解的概念。那麼什麼是網路協議呢?          網路協議是指對於網路中傳輸的資料格式的規定。對於網路程式設計初學者來說,沒有必要深入瞭解TCP/IP協議簇,所以對於初學者來