導航:首頁 > 編程語言 > tcp套接字編程java

tcp套接字編程java

發布時間:2023-06-04 21:43:18

java Socket 底層是怎樣基於TCP/IP 實現的

首先必須明確:TCP/IP模型中有四層結構: 應用層(Application Layer)、傳輸層(Transport Layer)、網路層(Internet Layer
)、鏈路層(LinkLayer)
其中Ip協議(Internet Protocol)是位於網路層的,TCP協議時位於傳輸層的。通過Ip協議可以使可以使兩台計算機使用同一種語言,從而允許Internet上連接不同類型的計算機和不同操作系統的網路。Ip協議只保證計算機能夠接收和發送分組數據。當計算機要和遠程的計算機建立連接時,TCP協議會讓他們建立連接:用於發送和接收數據的虛擬電路。

套接字或插座(socket)是一種軟體形式的抽象,用於表達兩台機器間一個連接的「終端」。針對一個特定的連接,每台機器上都有一個「套接字」,可以想像它們之間有一條虛擬的「線纜」。JAVA
有兩個基於數據流的套接字類:ServerSocket,伺服器用它「偵聽」進入的連接;Socket,客戶端用它初始一次連接。偵聽套接字只能接收新的連接請求,不能接收實際的數據包,即ServerSocket不能接收實際的數據包。
套接字是基於TCP/IP實現的,它是用來提供一個訪問TCP的服務介面,或者說套接字socket是TCP的應用編程介面API,通過它應用層就可以訪問TCP提供的服務。
在JAVA中,我們用 ServerSocket、Socket類創建一個套接字連接,從套接字得到的結果是一個InputStream以及OutputStream對象,以便將連接作為一個IO流對象對待。通過IO流可以從流中讀取數據或者寫數據到流中,讀寫IO流會有異常IOException產生。

⑵ Java開發實戰1200例的作品目錄

第1篇 圖形圖像篇
第1章 Java圖形與文本 2
1.1 繪制圖形和文本 3
實例001 繪制直線 3
實例002 繪制矩形 4
實例003 繪制正方形 5
實例004 繪制橢圓 6
實例005 繪制圓弧 7
實例006 繪制指定角度的填充扇形 8
實例007 繪制多邊形 9
實例008 繪制二次曲線 10
實例009 繪制三次曲線 12
實例010 繪制文本 13
實例011 設置文本的字體 14
實例012 設置文本和圖形的顏色 15
1.2 筆畫和圖形處理 16
實例013 設置筆畫的粗細 16
實例014 設置筆畫樣式 18
實例015 設置連接方式 19
實例016 設置虛線模式 20
實例017 縮放圖形 22
實例018 旋轉圖形 23
實例019 斜切圖形 24
實例020 為圖形填充漸變色 25
實例021 平移坐標軸 27
1.3 繪制圖案 28
實例022 繪制五環圖案 28
實例023 繪制藝術圖案 29
實例024 繪制花瓣 30
實例025 繪制公章 32
1.4 圖形的合並運算 33
實例026 圖形的加運算 33
實例027 圖形的減運算 35
實例028 圖形的交運算 36
實例029 圖形的異或運算 37
第2章 Java圖像處理 39
2.1 圖像處理 40
實例030 繪制圖像 40
實例031 縮放圖像 41
實例032 翻轉圖像 42
實例033 旋轉圖像 44
實例034 傾斜圖像 45
實例035 裁剪圖片 46
2.2 顏色處理 47
實例036 調整圖片的亮度 47
實例037 轉換彩色圖片為灰度圖片 49
實例038 使用像素值生成圖像 50
第3章 繪圖特效 52
3.1 文字特效 53
實例039 立體效果的文字 53
實例040 陰影效果的文字 54
實例041 傾斜效果的文字 55
實例042 漸變效果的文字 56
實例043 會變色的文字 58
實例044 水印文字特效 59
實例045 順時針旋轉文字 60
實例046 動態繪制文本 62
實例047 中文驗證碼 64
實例048 圖片驗證碼 65
實例049 帶干擾線的驗證碼 66
3.2 圖片特效 68
實例050 紋理填充特效 68
實例051 水波效果的圖片 69
實例052 局部圖像放大 71
實例053 圖片半透明特效 73
實例054 圖片溶合特效 74
實例055 以橢圓形顯示圖像 75
實例056 圖片百葉窗特效 76
實例057 圖片馬賽克特效 78
實例058 模糊 80
實例059 銳化 81
實例060 照亮邊緣 82
實例061 反向 84
實例062 光柵圖像 85
實例063 圖片倒影效果 87
第4章 動畫和游戲 90
4.1 文字動畫 91
實例064 文字淡入淡出 91
實例065 文字縮放 93
實例066 文字跑馬燈 94
實例067 字幕顯示 96
實例068 文字閃現 98
實例069 滾動廣告字幕 99
4.2 圖片動畫 101
實例070 圖片淡入淡出 101
實例071 隨滑鼠指針移動的圖片 103
實例072 通過鍵盤移動圖片 104
實例073 圖片動態拉伸 106
實例074 桌面彈球 107
實例075 循環滾動圖片 109
實例076 撞球動畫 111
實例077 電影膠片特效 113
實例078 隨機移動的圖片 115
實例079 雪花飄落動畫 116
實例080 圖片旋轉動畫 118
實例081 圖片閃現動畫 119
實例082 幀動畫效果 121
實例083 水波動畫 123
4.3 游戲開發 125
實例084 圖片配對游戲 125
實例085 小豬走迷宮 128
實例086 拼圖游戲 130
實例087 海灘捉螃蟹 133
實例088 荒山打獵游戲 135
實例089 打字母游戲 137
實例090 警察抓小偷 139
實例091 擲骰子 141
實例092 畫梅花 143
實例093 打造自己的開心農場 144
第5章 列印報表 147
5.1 列印控制 148
實例094 列印對話框 148
實例095 實現列印 149
實例096 列印圖形 150
實例097 列印圖片 152
實例098 列印預覽 153
實例099 倒序列印 155
實例100 為列印內容添加水印 157
實例101 自動為列印內容添加水印 158
5.2 列印的應用 160
實例102 列印快遞單 160
實例103 列印報表 162
實例104 列印桌面圖片 164
實例105 列印柱形圖表 165
實例106 列印餅形圖表 167
實例107 列印折線圖表 169
實例108 列印區域圖表 170
實例109 列印帶柱形圖表的報表 172
實例110 列印帶餅形圖表的報表 174
實例111 列印帶折線圖表的報表 175
實例112 導出報表到Excel表格 177
實例113 導出報表到PDF文檔 179
實例114 批量列印條形碼 181
實例115 相冊特效列印程序 183
實例116 鏡面效果文本列印 186
實例117 透明的列印預覽對話框 187
第6章 管理圖像文件 189
6.1 圖像的修改與保存 190
實例118 保存圖片文件 190
實例119 修改圖片文件名 191
實例120 縮放圖片並保存 192
實例121 為圖片添加水印並保存 194
實例122 溶合兩張圖片並保存 196
實例123 模糊圖片並保存 197
實例124 銳化圖片並保存 199
實例125 照亮邊緣並保存 200
實例126 反向並保存圖片 202
實例127 填充紋理並保存為圖片 204
6.2 圖片在資料庫中的存取 205
實例128 圖片存儲到Access資料庫中 205
實例129 圖片存儲到MySQL資料庫中 206
實例130 圖片存儲到SQLServer資料庫中 208
實例131 讀取Access資料庫中存儲的圖片 209
實例132 讀取MySQL資料庫中存儲的圖片 210
實例133 讀取SQLServer資料庫中存儲的圖片 211
實例134 修改Access資料庫中存儲的圖片 212
實例135 修改MySQL資料庫中存儲的圖片 214
實例136 修改SQLServer資料庫中存儲的圖片 215
6.3 其他應用 216
實例137 獲取滑鼠指針在任意位置的顏色值 216
實例138 圖片瀏覽器 218
實例139 轉換圖片格式 219
實例140 繪制石英鍾 221
實例141 畫圖程序 222
實例142 屏幕抓圖程序 224
實例143 屏幕放大鏡 225
第2篇 JFreeChart圖表篇
第7章 JFreeChart基本操作 230
7.1 JFreeChart基礎操作 231
實例144 基本餅圖 231
實例145 顯示圖示 232
實例146 工具欄提示 233
實例147 亂碼問題 235
實例148 顯示數值 237
實例149 抗鋸齒設置 238
7.2 設置圖表背景 239
實例150 設置背景圖片 239
實例151 設置圖片對齊方式 241
實例152 設置背景圖片透明度 242
實例153 設置背景顏色 243
7.3 處理圖表的邊框 244
實例154 隱藏圖表邊框 244
實例155 圖表邊框筆觸 245
實例156 圖表邊框顏色 247
7.4 修改圖表的圖示 248
實例157 設置圖示背景色 248
實例158 設置圖示邊框 249
實例159 設置圖示邊框顏色 250
實例160 設置圖示邊緣間距 251
實例161 設置圖示字體顏色 252
實例162 設置圖示位置 253
第8章 基礎圖表技術 255
8.1 普通餅圖 256
實例163 分離餅圖 256
實例164 橢圓形餅圖 257
實例165 餅圖的陰影 258
實例166 餅圖的分類邊框顏色 260
實例167 加粗餅圖分類邊框 261
實例168 設置餅圖顏色 262
實例169 餅圖旋轉角度 263
實例170 餅圖旋轉順序 265
實例171 隱藏分類標簽連接線 266
8.2 3D餅圖 267
實例172 創建3D餅圖 267
實例173 3D餅圖透明度 269
實例174 3D餅圖的Z軸 270
實例175 逆時針旋轉3D餅圖 271
實例176 順時針旋轉3D餅圖 272
8.3 多餅圖 274
實例177 實現多餅圖 274
實例178 多餅圖亂碼 275
實例179 多餅圖的展示方式 277
實例180 3D多餅圖 278
8.4 基本柱形圖 280
實例181 簡單柱型圖 280
實例182 柱形圖角度 282
實例183 柱形圖負值 283
8.5 X坐標軸 285
實例184 X軸字體 285
實例185 X軸標簽字體 287
實例186 X軸標簽角度 288
實例187 X軸顯示情況 290
實例188 X軸尺度顏色 292
實例189 隱藏X軸尺度 293
實例190 X軸尺度筆觸 295
實例191 X軸尺度標簽角度 296
實例192 X軸分類的間距 298
實例193 X軸分類與原點的間距 299
實例194 X軸的顯示位置 300
8.6 Y坐標軸 302
實例195 Y軸字體 302
實例196 Y軸標簽字體 304
實例197 Y軸顯示情況 305
實例198 Y軸尺度顏色 307
實例199 隱藏Y軸尺度 309
實例200 Y軸尺度筆觸 310
實例201 Y軸尺度標簽角度 312
實例202 Y軸起始值 313
實例203 Y軸箭頭 314
實例204 Y軸主要刻度線 316
實例205 Y軸主要刻度線長度 317
實例206 Y軸次要刻度線 319
實例207 Y軸次要刻度線長度 320
實例208 設置Y軸最大值 322
實例209 設置Y軸數據范圍 323
實例210 Y軸的顯示位置 324
8.7 高級柱形圖 326
實例211 設置網格豎線 326
實例212 設置網格豎線顏色 328
實例213 設置柱形圖文本註解 329
實例214 設置柱形圖文本註解字體 331
實例215 設置柱形圖文本註解顏色 333
實例216 設置柱形圖文本註解錨點 334
實例217 設置柱形圖文本註解類別錨點 336
實例218 設置柱形圖文本註解旋轉錨點 338
實例219 設置柱形圖線條註解 339
實例220 繪制柱形效果 341
實例221 柱形圖陰影 342
實例222 柱形圖陰影偏移 344
實例223 設置柱形的顏色 345
實例224 繪制3D柱形圖 346
實例225 標記柱形圖區間 348
實例226 多系列柱形圖 350
實例227 多系列3D柱形圖 352
第9章 擴展圖表技術 354
9.1 區域圖 355
實例228 基本區域圖 355
實例229 顯示多分類區域圖 357
實例230 設置區域圖透明度 359
實例231 添加說明文字 360
實例232 設置說明文字位置 362
實例233 區域圖X軸顯示位置 363
實例234 區域圖X軸標簽角度 364
實例235 區域圖X軸尺度標簽角度 366
實例236 設置區域顏色 367
9.2 氣泡圖 368
實例237 基本氣泡圖 368
實例238 氣泡圖X軸標簽 371
實例239 氣泡圖Y軸標簽 372
實例240 設置坐標范圍 374
實例241 設置透明度 375
實例242 設置氣泡顏色 377
實例243 氣泡圖X軸標簽角度 378
實例244 氣泡圖X軸尺度標簽角度 379
9.3 分步圖 381
實例245 基本分步圖 381
實例246 加粗分步圖 383
實例247 顯示虛線效果 385
實例248 設置分步圖顏色 386
實例249 隱藏分步圖 387
實例250 分步圖X軸顯示位置 389
實例251 分步圖X軸標簽角度 390
實例252 分步圖X軸尺度標簽角度 391
9.4 聯合分類圖 393
實例253 生成線形圖與柱形圖 393
實例254 設置圖表高度 395
實例255 設置圖表位置 397
實例256 線形圖與分布圖 398
9.5 雙軸圖 400
實例257 基本雙軸圖 400
實例258 基本雙Y圖 402
實例259 雙Y軸字體 404
實例260 3D雙軸圖 406
實例261 設置雙軸圖顏色 407
實例262 雙軸圖X軸標簽角度 409
實例263 雙軸圖X軸尺度標簽角度 410
9.6 折線圖 412
實例264 基本折線圖 412
實例265 多條折線圖 414
實例266 水平折線圖 416
實例267 隱藏折線圖 417
實例268 加粗折線 419
實例269 顯示折線節點 420
實例270 生成節點圖 421
實例271 設置虛線圖 423
實例272 設置折線顏色 424
實例273 3D折線圖 426
實例274 XY折線圖 427
實例275 排序折線圖 429
9.7 環形圖 431
實例276 基本環形圖 431
實例277 環形圖字體 432
實例278 設置環形深度 434
實例279 分離環形圖 436
實例280 橢圓環形圖 437
實例281 環形的陰影偏移 438
實例282 環形的簡單標簽 439
實例283 環形的旋轉角度 441
9.8 堆積條形圖 442
實例284 基本堆積條形圖 442
實例285 橫向堆積條形圖 445
實例286 設置邊線距離 446
實例287 渲染分組堆積條形圖 447
9.9 時序圖 450
實例288 基本時序圖 450
實例289 設置時間顯示格式 452
實例290 添加雙時間軸 453
實例291 雙時間軸位置 455
實例292 動態顯示十字標記 456
實例293 添加Y軸標記 458
實例294 添加X軸標記 459
實例295 設置刻度單位 461
實例296 設置時間軸范圍 462
第3篇 網路技術篇
第10章 網路應用基礎 466
10.1 網路地址解析 467
實例297 獲取本地主機的IP地址 467
實例298 獲取本地主機的域名和主機名 468
實例299 通過域名獲得IP地址 469
實例300 通過IP地址獲得域名和主機名 470
實例301 獲得內網的所有IP地址 472
10.2 網路資源管理 474
實例302 獲取網路資源的大小 474
實例303 解析網頁中的內容 475
實例304 網路資源的單線程下載 476
實例305 網路資源的多線程下載 478
實例306 下載網路資源的斷點繼傳 480
第11章 TCP套接字 483
11.1 Socket基礎 484
實例307 建立伺服器套接字 484
實例308 建立客戶端套接字 485
實例309 設置等待連接的超時時間 486
實例310 獲取Socket信息 487
實例311 接收和發送Socket信息 488
實例312 關閉Socket緩沖 491
11.2 TCP網路通信 492
實例313 使用Socket通信 492
實例314 防止Socket傳遞漢字亂碼 495
實例315 使用Socket傳遞對象 497
實例316 使用Socket傳輸圖片 499
實例317 使用Socket傳輸音頻 501
實例318 使用Socket傳輸視頻 503
實例319 一個伺服器與一個客戶端通信 504
實例320 一個伺服器與多個客戶端通信 506
實例321 客戶端一對多通信 508
實例322 客戶端一對一通信 509
實例323 基於Socket的資料庫編程 511
實例324 使用Proxy創建代理伺服器 513
實例325 使用ProxySelector選擇代理伺服器 514
11.3 TCP實用程序 516
實例326 聊天室伺服器端 516
實例327 聊天室客戶端 518
第12章 郵件收發 521
12.1 簡單郵件 522
實例328 配置郵件服務 522
實例329 發送郵件 526
實例330 接收郵件 528
12.2 復雜郵件 529
實例331 發送帶附件的郵件 529
實例332 接收帶附件的郵件 531
實例333 發送郵件時進行身份驗證 533
實例334 接收郵件時進行身份驗證 535
實例335 顯示未讀郵件 536
實例336 顯示已讀郵件 539
第4篇 Java安全與Applet應用篇
第13章 Java安全 544
13.1 Java對稱加密 545
實例337 使用BASE64加密 545
實例338 使用BASE64解密 546
實例339 生成DES的密鑰 547
實例340 使用DES加密 548
實例341 使用DES解密 549
實例342 PBE的鹽值 551
實例343 生成PBE的密鑰 552
實例344 使用PBE加密 552
實例345 使用PBE解密 553
13.2 Java非對稱加密 555
實例346 生成RSA密鑰對 555
實例347 使用RSA的簽名 556
實例348 RSA服務端加密 557
實例349 RSA客戶端加密 559
實例350 DH服務端加密 560
實例351 DH客戶端加密 563
13.3 Java單項加密 565
實例352 使用MD5加密 565
實例353 使用Hmac加密 566
實例354 使用DSA加密 568
第14章 Applet的應用 570
14.1 Applet在html中的使用 571
實例355 在html中顯示Applet 571
實例356 設置Applet的顯示位置 572
實例357 Applet獲取頁面傳遞的參數 573
實例358 使用<applet>標記中的archive屬性 574
14.2 Applet的方法 576
實例359 使用paint()方法繪制頁面內容 576
實例360 使用update()方法更新頁面內容 577
實例361 使用repaint()方法重新繪制頁面 578
實例362 Applet顯示地址欄上的路徑 579
實例363 Applet顯示class存放的路徑 581
14.3 Applet中的文字處理 582
實例364 控制Applet字體大小 582
實例365 控制Applet文字位置 583
實例366 控制Applet字體樣式 584
實例367 Applet中繪制立體效果的文字 585
實例368 Applet中繪制陰影效果的文字 586
實例369 Applet中繪制傾斜效果的文字 587
實例370 Applet中繪制漸變效果的文字 588
實例371 Applet中繪制會變色的文字 590
實例372 Applet中繪制順時針旋轉的文字 591
實例373 Applet中動態繪制文本 593
14.4 Applet中的圖形處理 594
實例374 Applet繪制直線 594
實例375 Applet繪制矩形 596
實例376 Applet繪制圓角矩形 597
實例377 Applet繪制橢圓 598
實例378 Applet繪制圓弧 599
實例379 Applet繪制折線 600
實例380 Applet繪制多角形 601
實例381 Applet繪制圖片 602
實例382 Applet中的圖形加運算 603
實例383 Applet中的圖形減運算 604
實例384 Applet中的圖形交運算 606
實例385 Applet中的圖形異或運算 607
實例386 Applet中繪制紋理填充圖形 608
14.5 Applet中的圖像處理 609
實例387 Applet中縮放圖像 609
實例388 Applet中翻轉圖像 610
實例389 Applet中旋轉圖像 612
實例390 Applet中傾斜圖像 613
實例391 Applet中調整圖片的亮度 614
實例392 Applet中繪制中文驗證碼 615
實例393 Applet中繪制圖片驗證碼 617
實例394 Applet中繪制帶干擾線的驗證碼 618
實例395 Applet中模糊圖像 620
實例396 Applet中銳化圖像 621
實例397 Applet中照亮圖像邊緣 622
實例398 Applet中反向圖像 624
實例399 Applet中圖像動態拉伸 625
14.6 Applet中的文字動畫 627
實例400 Applet中文字縮放動畫 627
實例401 Applet中文字跑馬燈動畫 628
實例402 Applet中字幕顯示動畫 630
實例403 Applet中文字閃現動畫 631
實例404 Applet中滾動廣告字幕動畫 633
第5篇 XML篇
第15章 初識XML 636
15.1 XML語言基礎 637
實例405 簡單的XML 637
實例406 驗證XML的格式 638
實例407 XML屬性的使用 639
實例408 XML中CDATA的使用 640
15.2 XML與CSS 642
實例409 在XML中使用CSS 642
實例410 CSS格式化XML布局 643
實例411 CSS格式化XML背景色 645
實例412 CSS格式化XML字體 647
實例413 CSS改變XML中的滑鼠手勢 649
實例414 CSS在XML中添加背景圖 651
實例415 CSS製作XML表格 652
15.3 XML與XSLT的元素 654
實例416 在XML使用XSLT 654
實例417 使用XSLT中的template 656
實例418 使用XSLT中的value-of 657
實例419 使用XSLT中的for-each 659
實例420 使用XSLT中的if 660
實例421 使用XSLT中的sort 662
實例422 使用XSLT中的choose 664
實例423 使用XSLT中的-of 665
實例424 使用XSLT中的apply-templates 667
實例425 使用XSLT中的attribute 669
實例426 使用XSLT中的elements 670
15.4 XML與XSLT的內建函數 672
實例427 使用XSLT中的generate-id() 672
實例428 使用XSLT中的format-number() 674
實例429 使用XSLT中的document() 675
15.5 DTD的引用與驗證 678
實例430 在XML內部定義DTD 678
實例431 在XML外部引用DTD 679
實例432 驗證XML是否符合DTD的定義 680
15.6 使用DTD定義XML元素 682
實例433 在DTD聲明元素 682
實例434 在DTD聲明重復元素 683
實例435 在DTD聲明選擇性元素 684
實例436 在DTD中使用ENTITY 686
15.7 使用DTD定義XML屬性 687
實例437 在DTD聲明元素屬性 687
實例438 在DTD聲明帶有#IMPLIED的屬性 688
實例439 在DTD聲明帶有#REQUIRED的屬性 690
實例440 在DTD聲明帶有#FIXED的屬性 691
實例441 在DTD聲明列舉屬性值 692
實例442 類型為ID的屬性實例 693
實例443 類型為IDREF的屬性實例 695
實例444 類型為NMTOKEN的屬性實例 697
第16章 XML Schema 699
16.1 XSD的引用與驗證 700
實例445 在XML中使用XML Schema 700
實例446 驗證XML是否符合Schema的描述 701
實例447 XSD文檔根元素的引用 703
實例448 在XSD中使用注釋 703
16.2 使用XSD簡單類型定義XML元素 704
實例449 在XSD定義XML元素 704
實例450 使用xs:simpleType和xs:restriction 705
實例451 使用xs:list 706
實例452 使用xs:enumeration 708
實例453 使用xs:pattern 710
16.3 使用XSD復雜類型定義XML元素 711
實例454 使用xs:complexType和xs:sequence 711
實例455 使用xs:choice 713
實例456 使用xs:all 714
實例457 使用xs:group 716
實例458 使用xs:extension和xs:simpleContent 718
實例459 使用xs:extension和xs:complexContent 719
實例460 使用xs:restriction和xs:simpleContent 721
實例461 使用xs:restriction和xs:complexContent 723
實例462 使用xs:attributeGroup和xs:attribute 725
16.4 使用XSD的普通類型 727
實例463 在XSD中對字元進行限制 727
實例464 在XSD中對數值進行限制 728
第17章 解析XML文件 730
17.1 使用SAX讀取XML 731
實例465 從文件中讀取XML 731
實例466 從數據流中讀取XML 732
實例467 從數據源中讀取XML 733
17.2 使用SAX解析XML 734
實例468 解析XML元素名稱 734
實例469 解析XML元素名稱和內容 736
實例470 解析XML元素屬性和屬性值 738
實例471 使用VO解析XML元素 740
實例472 使用VO解析XML元素和屬性 741
實例473 使用SAX驗證DTD 743
17.3 使用DOM讀取XML 745
實例474 從文件中讀取XML 745
實例475 從數據流中讀取XML 746
實例476 從數據源中讀取XML 747
17.4 使用DOM解析XML 748
實例477 解析XML元素名稱 748
實例478 解析XML元素名稱和內容 749
實例479 解析XML元素屬性和屬性值 751
實例480 使用VO解析XML元素 752
實例481 使用VO解析XML元素和屬性 753
17.5 使用DOM操作XML 755
實例482 創建簡單的XML文件 755
實例483 創建基本的XML文件 757
實例484 使用VO創建XML文件 759
實例485 使用DOM添加XML元素 761
實例486 使用DOM修改XML元素 764
實例487 使用DOM刪除XML元素 766
第6篇 操作PDF篇
第18章 操作PDF文檔 770
18.1 文檔和文檔屬性 771
實例488 創建PDF文檔 771
實例489 添加PDF文檔標題 772
實例490 添加PDF文檔主題 773
實例491 添加PDF文檔關鍵詞 774
實例492 添加PDF文檔作者 775
實例493 添加PDF文檔創建者 776
實例494 添加PDF文檔製作者 777
實例495 添加PDF文檔創建日期 778
18.2 初始化操作 779
實例496 設置頁面大小 779
實例497 橫向顯示頁面 780
實例498 縱向顯示頁面 781
實例499 添加水印 782
實例500 添加頁眉和頁腳 783
實例501 創建新頁 784
實例502 為PDF文檔添加頁碼 785
18.3 字體與中文處理 786
實例503 設置特殊的文本字體 786
實例504 加粗字體 787
實例505 添加下劃線 788
實例506 添加刪除線 789
實例507 在PDF文檔中顯示中文 790
實例508 設置PDF文檔密碼 791
18.4 塊、短語、段落、章節和區域 792
實例509 添加和創建塊 792
實例510 設置上標和下標 793
實例511 設置文本背景顏色 794
實例512 添加和創建短語 795
實例513 添加和創建段落 796
實例514 設置段落首行縮進 797
實例515 設置段落的上下間距 798
實例516 設置段落左右縮進 799
實例517 設置段落的對齊方式 800
實例518 設置段落字體大小 801
實例519 設置段落文本顏色 802
實例520 添加章節 803
實例521 在章節中添加小節 804
實例522 在小節中添加列表 805
實例523 在小節中添加段落 807
實例524 在小節中添加表格 808
實例525 在小節中添加圖片 809
18.5 讀取PDF文檔 810
實例526 文本文件轉換為PDF文檔 810
實例527 讀取PDF文檔 812
實例528 讀取加密的PDF文檔 813
實例529 編輯PDF文檔 814
實例530 導入已有文檔 816
實例531 導入並添加頁碼 817
實例532 導入並添加水印 818
實例533 導入並添加新頁和內容 819
實例534 拆分PDF文檔 821
實例535 合並PDF文檔 822
實例536 列印PDF文檔 823
……
第19章 繪制PDF圖形和圖像
第20章 繪制PDF表格
第21章 設置閱讀器參數

⑶ 在javasocket網路編程中,開發基於udp協議的程序使用的套接字有哪些

一、 填空題

___ IP地址____用來標志網路中的一個通信實體的地址。通信實體可以是計算機,路由器等。
統一資源定位符URL是指向互聯網「資源」的指針,由4部分組成:協議、存放資源的主機域名、__埠___和資源路徑和文件名。
URL 是統一資源定位器的簡稱,它表示Internet上某一資源的地址。
在Socket編程中,IP地址用來標志一台計算機,但是一台計算機上可能提供多種應用程序,使用 埠 來區分這些應用程序。
在Java Socket網路編程中,開發基於TCP協議的伺服器端程序使用的套接字是 ServerSocket 。
在Java Socket網路編程中,開發基於UDP協議的程序使用的套接字是 DatagramSocket 。
二、 選擇題

1.以下協議都屬於TCP/IP協議棧,其中位於傳輸層的協議是(AD)。(選擇二項)
A TCP
B.HTTP
C.SMTP
D.UDP
2.以下協議中屬於TCP/IP協議棧中應用層協議的是(A)。(選擇一項)
A HTTP
B.TCP
C.UDP
D.IP
3.以下說法中關於UDP協議的說法正確的是(AD)。(選擇二項)
A.發送不管對方是否准備好,接收方收到也不確認
B.面向連接
C.佔用系統資源多、效率低
D.非常簡單的協議,可以廣播發送
4.在基於TCP網路通信模式中,客戶與伺服器程序的主要任務是(BC)。(選擇二項)
A 客戶程序在網路上找到一條到達伺服器的路由
B.客戶程序發送請求,並接收伺服器的響應
C.伺服器程序接收並處理客戶請求,然後向客戶發送響應結果
D.如果客戶程序和伺服器都會保證發送的數據不會在傳輸途中丟失
5.在Java網路編程中,使用客戶端套接字Socket創建對象時,需要指定(A)。慧宏(選擇一項)
A 伺服器主機名稱和埠
B.伺服器埠和文件
C.伺服器名稱和文件
D.伺服器地址和文件
6.ServerSocket的監聽滑碧尺方法accept( )方法的返回值類型是(A )。(選擇一項)
A.Socket
B.Void
C.Object
D.DatagramSocket
7.Java UDP Socket編程主要用到的兩個類是(BD)。(選擇二項信高)
A UDPSocket
B.DatagramSocket
C.UDPPacket
D.DatagramPacket
8.在使用UDP套接字通信時,常用(D)類把要發送的信息打包。(選擇一項)
A String
B.DatagramSocket
C.MulticastSocket
D.DatagramPacket

三、 判斷題

1. Socket是傳輸層供給應用層的編程介面,是應用層與傳輸層之間的橋梁 。( T )
2. TCP/IP傳輸控制協議是Internet的主要協議,定義了計算機和外設進行通信的規則。TCP/IP網路參考模型包括七個層次:應用層、會話層、表示層、傳輸層、網路層、鏈路層和物理層。( F )
3. TCP協議一種面向連接的、可靠的、基於位元組流的通信協議 。HTTP、FTP、TELNET、SMTP 都是基於TCP協議的應用層協議。( T )
4. UDP協議是一種面向無連接的、可靠的、基於位元組流的傳輸層通信協議,該協議佔用系統資源多、效率較低。( F )

四、 簡答題

1.TCP/IP協議棧中,TCP協議和UDP協議的聯系和區別?

2.簡述基於TCP的Socket編程的主要步驟。提示:分別說明伺服器端和客戶端的編程步驟。

3.簡述基於UDP的Socket編程的主要步驟。提示:分別說明伺服器端和客戶端的編程步驟。

五、 編碼題

1.使用基於TCP的Java Socket編程,完成如下功能:

1) 要求從客戶端錄入幾個字元,發送到伺服器端。

2) 由伺服器端將接收到的字元進行輸出。

3) 伺服器端向客戶端發出「您的信息已收到」作為響應。

4) 客戶端接收伺服器端的響應信息。

提示:

伺服器端:PrintWriter out =new PrintWriter(socket.getOutputStream(),true);

客戶端:BufferedReader line=new BufferedReader(new InputStreamReader(System.in));

⑷ java程序中使用tcp套接字編寫服務端程序的套接字類是

ServerSocket。
「java程序中使用tcp套接字編寫服務端程序的套接字類是」是《Java語言》復習資料的一道練習題,答案是ServerSocket。
Java是一門編程語言,是一門連接人與計算機的語言。

⑸ 在javasocket網路編程中,開發基於udp協議的程序使用的套接字有哪些

Socket套接字,是由系統提供用於網路通信的技術(操作系統給應用程序提供的一組API叫做Socket API),是基於TCP/IP協議的網路通信的基本操作單元。基於Socket套接字的網路程序開發就是網路編程。

socket可以視為是應用層和傳輸層之間的通信橋梁;
傳輸層的核心協議有兩種:TCP,UDP;socket API也有對應的兩組,由於TCP和UDP協議差別很大,因此,這兩組API差別也挺大。

分類:
Socket套接字主要針對傳輸層協議劃分為如下三類:

流套接字:使用傳輸層TCP協議
TCP,即Transmission Control Protocol(傳輸控制協議),傳輸層協議;
TCP的特點:

有連接:像打電話,得先接通,才能交互數據;
可靠傳輸:傳輸過程中,發送方知道接收方有沒有收到數據.(打電話就是可靠傳輸);
面向位元組流:以位元組為單位進行傳輸.(非常類似於文件操作中的位元組流);
全雙工:一條鏈路,雙向通信;
有接收緩沖區,也有發送緩沖區。
大小不限
對於位元組流來說,可以簡單的理解為,傳輸數據是基於IO流,流式數據的特徵就是在IO流沒有關閉的情況下,是無邊界的數據,可以多次發送,也可以分開多次接收。

數據報套接字:使用傳輸層UDP協議
UDP,即User Datagram Protocol(用戶數據報協議),傳輸層協議。
UDP的特點:

無連接:像發微信,不需要接通,直接就能發數據;
不可靠傳輸:傳輸過程中,發送方不知道接收方有沒有收到數據.(發微信就是不可靠傳輸);
面向數據報:以數據報為單位進行傳輸(一個數據報都會明確大小)一次發送/接收必須是一個完整的數據報,不能是半個,也不能是一個半;
全雙工:一條鏈路,雙向通信;
有接收緩沖區,無發送緩沖區;
大小受限:一次最多傳輸64k;
對於數據報來說,可以簡單的理解為,傳輸數據是一塊一塊的,發送一塊數據假如100個位元組,必須一次發送,接收也必須一次接收100個位元組,而不能分100次,每次接收1個位元組。

原始套接字
原始套接字用於自定義傳輸層協議,用於讀寫內核沒有處理的IP協議數據。

二、UDP數據報套接字編程
UDPSocket中,主要涉及到兩類:DatagramSocket、DatagramPacket;

DatagramSocket API
DatagramSocket 創建了一個UDP版本的Socket對象,用於發送和接收UDP數據報,代表著操作系統中的一個socket文件,(操作系統實現的功能–>)代表著網卡硬體設備的抽象體現。

DatagramSocket 構造方法:

方法簽名 方法說明
DatagramSocket() 創建一個UDP數據報套接字的Socket,綁定到本機任意一個隨機埠(一般用於客戶端)
DatagramSocket(int port) 創建一個UDP數據報套接字的Socket,綁定到本機指定的埠(一般用於服務端)
DatagramSocket 方法:

方法簽名 方法說明
void receive(DatagramPacket p) 從此套接字接收數據報(如果沒有接收到數據報,該方法會阻塞等待)
void send(DatagramPacket p) 從此套接字發送數據報包(不會阻塞等待,直接發送)
void close() 關閉此數據報套接字
DatagramPacket API
代表了一個UDP數據報,是UDP Socket發送和接收的數據報,每次發送/接收數據報,都是在傳輸一個DatagramPacket對象。

DatagramPacket 構造方法:

方法簽名 方法說明
DatagramPacket(byte[] buf, int length) 構造一個DatagramPacket以用來接收數據報,接收的數據保存在位元組數組(第一個參數buf)中,接收指定長度(第二個參數length)
DatagramPacket(byte[] buf, int offset, int length,SocketAddress address) 構造一個DatagramPacket以用來發送數據報,發送的數據為位元組數組(第一個參數buf)中,從0到指定長度(第二個參數length)。address指定目的主機的IP和埠號
DatagramPacket 方法:

方法簽名 方法說明
InetAddress getAddress() 從接收的數據報中,獲取發送端主機IP地址;或從發送的數據報中,獲取接收端主機IP地址
int getPort() 從接收的數據報中,獲取發送端主機的埠號;或從發送的數據報中,獲取接收端主機埠號
byte[] getData() 獲取數據報中的數據
構造UDP發送的數據報時,需要傳入 SocketAddress ,該對象可以使用 InetSocketAddress 來創建。

InetSocketAddress API
InetSocketAddress ( SocketAddress 的子類 )構造方法:

方法簽名 方法說明
InetSocketAddress(InetAddress addr, int port) 創建一個Socket地址,包含IP地址和埠號
示例1:寫一個簡單的客戶端服務程序,回顯服務(EchoSever)
在這里插入圖片描述
構建Socket對象有很多失敗的可能:

埠號已經被佔用,同一個主機的兩個程序不能有相同的埠號(這就好比兩個人不能擁有相同的電話號碼);
此處,多個進程不能綁定同一個埠號,但是一個進程可以綁定多個埠,(這就好比一個人可以擁有多個手機號),一個進程可以創建多個Socket對象,每個Socket都綁定自己的埠。
每個進程能夠打開的文件個數是有上限的,如果進程之間已經打開了很多文件,就可能導致此時的Socket文件不能順利打開;
在這里插入圖片描述
這個長度不一定是1024,假設這里的UDP數據最長是1024,實際的數據可能不夠1024.

在這里插入圖片描述
這里的參數不再是一個空的位元組數組了,response是剛才根據請求計算的得到的響應,是非空的,DatagramPacket 裡面的數據就是String response的數據。

response.getBytes().length:這里拿到的是位元組數組的長度(位元組的個數),而response.length得到的是字元的長度。

五元組
一次通信是由5個核心信息描述的:源IP、 源埠、 目的IP、 目的埠、 協議類型。

站在客戶端角度:

源IP:本機IP;
源埠:系統分配的埠;
目的IP:伺服器的IP;
目的埠:伺服器的埠;
協議類型:TCP;
站在伺服器的角度:

源IP:伺服器程序本機的IP;
源埠:伺服器綁定的埠(此處手動指定了9090);
目的IP:包含在收到的數據報中(客戶端的IP);
目的埠:包含在收到的數據報中(客戶端的埠);
協議類型:UDP;

⑹ java socket有什麼作用

所謂socket通常也稱作"套接字",用於描述IP地址和埠,是一個通信鏈的句柄。應用程序通常通過"套接字"向網路發出請求或者應答網路請求。
以J2SDK-1.3為例,Socket和ServerSocket類庫位於java.net包中。ServerSocket用於伺服器端,Socket是建立網路連接時使用的。在連接成功時,應用程序兩端都會產生一個Socket實例,操作這個實例,完成所需的會話。對於一個網路連接來說,套接字是平等的,並沒有差別,不因為在伺服器端或在客戶端而產生不同級別。不管是Socket還是ServerSocket它們的工作都是通過SocketImpl類及其子類完成的。
重要的Socket API:
java.net.Socket繼承於java.lang.Object,有八個構造器,其方法並不多,下面介紹使用最頻繁的三個方法,其它方法大家可以見JDK-1.3文檔。
. Accept方法用於產生"阻塞",直到接受到一個連接,並且返回一個客戶端的Socket對象實例。"阻塞"是一個術語,它使程序運行暫時"停留"在這個地方,直到一個會話產生,然後程序繼續;通常"阻塞"是由循環產生的。
. getInputStream方法獲得網路連接輸入,同時返回一個InputStream對象實例,。
. getOutputStream方法連接的另一端將得到輸入,同時返回一個OutputStream對象實例。
注意:其中getInputStream和getOutputStream方法均會產生一個IOException,它必須被捕獲,因為它們返回的流對象,通常都會被另一個流對象使用。
編輯本段ServerSocket類例子
int PORT = 8888; // 偵聽埠
// 創建ServerSocket
ServerSocket serverSocket = new ServerSocket(PORT);
// 開始循環
while (true) {
// 等待連接
Socket socket = serverSocket.accept();
// 處理鏈接的線程類
ServerThread st = new ServerThread(socket);
// 啟動線程處理
new Thread(st).start();
}
編輯本段客戶端的例子
int PORT = 8888; // 偵聽埠
// 建立連接
socket = new Socket(「127.0.0.1」, 8888);
// 輸入數據的讀取
BufferedReader netIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 寫入數據
PrintWriter netOut = new PrintWriter(socket.getOutputStream());

⑺ 誰能給一個java.net包的介紹,謝謝!

軟體包 java.net 的描述
為實現網路應用程序提供類。

java.net 包可以大致分為兩個部分:

低級 API,用於處理以下抽象:

地址,也就是網路標識符,如 IP 地址。

套接字,也就是基本雙向數據通信機制。

介面,用於描述網路介面。

高級 API,用於處理以下抽象:

URI,表示統一資源標識符。

URL,表示統一資源定位符。

連接,表示到 URL 所指向資源的連接。

地址
在整個 java.net API 中,地址或者用作主機標識符或者用作套接字端點標識符。

InetAddress 類是表示 IP(Internet 協議)地址的抽象。它擁有兩個子類:

用於 IPv4 地址的 Inet4Address。
用於 IPv6 地址的 Inet6Address。
但是,在大多數情況下,不必直接處理子類,因為 InetAddress 抽象應該覆蓋大多數必需的功能。

關於 IPv6
並非所有系統都支持 IPv6 協議,而當 Java 網路連接堆棧嘗試檢測它並在可用時透明地使用它時,還可以利用系統屬性禁用它。在 IPv6 不可用或被顯式禁用的情況下,Inet6Address 對大多數網路連接操作都不再是有效參數。雖然可以保證在查找主機名時 java.net.InetAddress.getByName 之類的方法不返回 Inet6Address,但仍然可能通過傳遞字面值來創建此類對象。在此情況下,大多數方法在使用 Inet6Address 調用時都將拋出異常。

套接字
套接字是在網路上建立機器之間的通信鏈接的方法。java.net 包提供 4 種套接字:

Socket 是 TCP 客戶端 API,通常用於連接遠程主機。
ServerSocket 是 TCP 伺服器 API,通常接受源於客戶端套接字的連接。
DatagramSocket 是 UDP 端點 API,用於發送和接收數據包
MulticastSocket 是 DatagramSocket 的子類,在處理多播組時使用。
使用 TCP 套接字的發送和接收操作需要藉助 InputStream 和 OutputStream 來完成,這兩者是通過 Socket.getInputStream() 和 Socket.getOutputStream() 方法獲取的。

介面
NetworkInterface 類提供 API 以瀏覽和查詢本地機器的所有網路介面(例如,乙太網連接或 PPP 端點)。只有通過該類才可以檢查是否將所有本地介面都配置為支持 IPv6。

高級 API
java.net 包中的許多類可以提供更加高級的抽象,允許方便地訪問網路上的資源。這些類為:

URI 是表示在 RFC 2396 中指定的統一資料標識符的類。顧名思義,它只是一個標識符,不直接提供訪問資源的方法。
URL 是表示統一資源定位符的類,它既是 URI 的舊式概念又是訪問資源的方法。
URLConnection 是根據 URL 創建的,是用於訪問 URL 所指向資源的通信鏈接。此抽象類將大多數工作委託給底層協議處理程序,如 http 或 ftp。
HttpURLConnection 是 URLConnection 的子類,提供一些特定於 HTTP 協議的附加功能。
建議的用法是使用 URI 指定資源,然後在訪問資源時將其轉換為 URL。從該 URL 可以獲取 URLConnection 以進行良好控制,也可以直接獲取 InputStream。

下面是一個示例:

URI uri = new URI("http://java.sun.com/");
URL url = uri.toURL();
InputStream in = url.openStream();

協議處理程序
如上所述,URL 和 URLConnection 都依賴於協議處理程序,所以協議處理程序必須存在;否則將拋出異常。此為與 URI 的主要不同點,URI 僅標識資源,所以不必訪問協議處理程序。因此,盡管可能利用任何種類的協議方案(例如,myproto://myhost.mydomain/resource/)創建 URI,但類似的 URL 仍將試圖實例化指定協議的處理程序;如果指定協議的處理程序不存在,則拋出異常。

默認情況下,協議處理程序從默認位置動態載入。但是,通過設置 java.protocol.handler.pkgs 系統屬性也可能增加搜索路徑。例如,如果將其設置為 myapp.protocols,則 URL 代碼將首先嘗試(對於 http 而言)載入 myapp.protocols.http.Handler,然後,如果失敗,則嘗試從默認位置載入 http.Handler。

注意,處理程序類必須為抽象類 URLStreamHandler 的子類。

⑻ Java中socket填的ip

首先必須明確:TCP/IP模型中有四層結構:
應用層(Application Layer)、傳輸層(Transport Layer)、網路層(Internet Layer )、鏈路層(LinkLayer)
其中Ip協議(Internet Protocol)是位於網路層的,TCP協議時位於傳輸層的。通過Ip協議可以使可以使兩台計算機使用同一種語言,從而允許Internet上連接不同類型的計算機和不同操作系統的網路。Ip協議只保證計算機能夠接收和發送分組數據。 當計算機要和遠程的計算機建立連接時,TCP協議會讓他們建立連接:用於發送和接收數據的虛擬電路。

在JAVA中,我們用 ServerSocket、Socket類創建一個套接字連接,從套接字得到的結果是一個InputStream以及OutputStream對象,以便將連接作為一個IO流對象對待。通過IO流可以從流中讀取數據或者寫數據到流中,讀寫IO流會有異常IOException產生。

套接字或插座(socket)是一種軟體形 式的抽象,用於表達兩台機器間一個連接的「終端」。針對一個特定的連接,每台機器上都有一個「套接字」,可以想像它們之間有一條虛擬的「線纜」。JAVA 有兩個基於數據流的套接字類:ServerSocket,伺服器用它「偵聽」進入的連接;Socket,客戶端用它初始一次連接。偵聽套接字只能接收新的 連接請求,不能接收實際的數據包,即ServerSocket不能接收實際的數據包。
套接字是基於TCP/IP實現的,它是用來提供一個訪問TCP的服務介面,或者說套接字socket是TCP的應用編程介面API,通過它應用層就可以訪問TCP提供的服務。
在JAVA中,我們用 ServerSocket、Socket類創建一個套接字連接,從套接字得到的結果是一個InputStream以及OutputStream對象,以便 將連接作為一個IO流對象對待。通過IO流可以從流中讀取數據或者寫數據到流中,讀寫IO流會有異常IOException產生。
套接字底層是基於TCP的,所以socket的超時和TCP超時是相同的。下面先討論套接字讀寫緩沖區,接著討論連接建立超時、讀寫超時以及JAVA套接字編程的嵌套異常捕獲和一個超時例子程序的抓包示例。
1 socket讀寫緩沖區
一旦創建了一個套接字實例,操作系統就會為其分配緩沖區以存放接收和要發送的數據。

JAVA可以設置讀寫緩沖區的大小-setReceiveBufferSize(int size), setSendBufferSize(int size)。
向輸出流寫數據並不意味著數據實際上已經被發送,它們只是被復制到了發送緩沖區隊列SendQ,就是在Socket的OutputStream上調用 flush()方法,也不能保證數據能夠立即發送到網路。真正的數據發送是由操作系統的TCP協議棧模塊從緩沖區中取數據發送到網路來完成的。
當有數據從網路來到時,TCP協議棧模塊接收數據並放入接收緩沖區隊列RecvQ,輸入流InputStream通過read方法從RecvQ中取出數據。
2 socket連接建立超時
socket連接建立是基於TCP的連接建立過程。TCP的連接需要通過3次握手報文來完成,開始建立TCP連接時需要發送同步SYN報文,然後等待確認 報文SYN+ACK,最後再發送確認報文ACK。TCP連接的關閉通過4次揮手來完成,主動關閉TCP連接的一方發送FIN報文,等待對方的確認報文;被 動關閉的一方也發送FIN報文,然等待確認報文。
正在等待TCP連接請求的一端有一個固定長度的連接隊列,該隊列中的連接已經被TCP接受(即三次握手已經完成),但還沒有被應用層所接受。TCP接受一個連接是將其放入這個連接隊列,而應用層接受連接是將其從該隊列中移出。應用層可以通過設置backlog變數來指明該連接隊列的最大長度,即已被TCP接受而等待應用層接受的最大連接數。

當一個連接請求SYN到達時,TCP確定是否接受這個連接。如果隊列中還有空間,TCP模塊將對SYN進行確認並完成連接的建立。但應用層只有在三次握手中的第三個報文收到後才會知道這個新連接。如果隊列沒有空間,TCP將不理會收到的SYN。
如果應用層不能及時接受已被TCP接受的連接,這些連接可能占滿整個連接隊列,新的連接請求可能不被響應而會超時。如果一個連接請求SYN發送後,一段時間後沒有收到確認SYN+ACK,TCP會重傳這個連接請求SYN兩次,每次重傳的時間間隔加倍,在規定的時間內仍沒有收到SYN+ACK,TCP將放棄這個連接請求,連接建立就超時了。
JAVA Socket連接建立超時和TCP是相同的,如果TCP建立連接時三次握手超時,那麼導致Socket連接建立也就超時了。可以設置Socket連接建立的超時時間-
connect(SocketAddress endpoint, int timeout)
如果在timeout內,連接沒有建立成功,在TimeoutException異常被拋出。如果timeout的值小於三次握手的時間,那麼Socket連接永遠也不會建立。
不同的應用層有不同的連接建立過程,Socket的連接建立和TCP一樣-僅僅需要三次握手就完成連接,但有些應用程序需要交互很多信息後才能成功建立連接,比如Telnet協議,在TCP三次握手完成後,需要進行選項協商之後,Telnet連接才建立完成。
3 socket讀超時
如果輸入緩沖隊列RecvQ中沒有數據,read操作會一直阻塞而掛起線程,直到有新的數據到來或者有異常產生。調用setSoTimeout(int timeout)可以設置超時時間,如果到了超時時間仍沒有數據,read會拋出一個SocketTimeoutException,程序需要捕獲這個異 常,但是當前的socket連接仍然是有效的。
如果對方進程崩潰、對方機器突然重啟、網路斷開,本端的read會一直阻塞下去(由前面可知:雙方要關閉連接需要四次揮手 .對方機重啟或斷開只是對方機的TCP連接關閉,本端的TCP連接還沒關閉,所以本端機會一直阻塞),這時設置超時時間是非常重要的,否則調用read的線程會一直掛起。
TCP模塊把接收到的數據放入RecvQ中,直到應用層調用輸入流的read方法來讀取。如果RecvQ隊列被填滿了,這時TCP會根據滑動窗口機制通知 對方不要繼續發送數據,本端停止接收從對端發送來的數據,直到接收者應用程序調用輸入流的read方法後騰出了空間。
4 socket寫超時
socket的寫超時是基於TCP的超時重傳。超時重傳是TCP保證數據可靠性傳輸的一個重要機制,其原理是在發送一個數據報文後就開啟一個計時器,在一 定時間內如果沒有得到發送報文的確認ACK,那麼就重新發送報文。如果重新發送多次之後,仍沒有確認報文,就發送一個復位報文RST,然後關閉TCP連 接。首次數據報文發送與復位報文傳輸之間的時間差大約為9分鍾,也就是說如果9分鍾內沒有得到確認報文,就關閉連接。但是這個值是根據不同的TCP協議棧 實現而不同。
如果發送端調用write持續地寫出數據,直到SendQ隊列被填滿。如果在SendQ隊列已滿時調用write方法,則write將被阻塞,直到 SendQ有新的空閑空間為止,也就是說直到一些位元組傳輸到了接收者套接字的RecvQ中。如果此時RecvQ隊列也已經被填滿,所有操作都將停止,直到 接收端調用read方法將一些位元組傳輸到應用程序。
當Socket的write發送數據時,如果網線斷開、對端進程崩潰或者對端機器重啟動,(由前面可知:雙方要關閉連接需要四次揮手 .對端進程崩潰或者對端機器重啟動只是對方機的TCP連接關閉,本端的TCP連接還沒關閉,所以本端機會一直阻塞)TCP模塊會重傳數據,最後超時而關閉連接。下次如再調用write會導致一個異常而退出。
Socket寫超時是基於TCP協議棧的超時重傳機制,一般不需要設置write的超時時間,也沒有提供這種方法。
5 雙重嵌套異常捕獲
如果ServerSocket、Socket構造失敗,只需要僅僅捕獲這個構造失敗異常而不需要調用套接字的close方法來釋放資源(必須保證構造失敗 後不會留下任何需要清除的資源),因為這時套接字內部資源沒有被成功分配。如果構造成功,必須進入一個try finally語句塊里調用close釋放套接字。請參照下面例子程序。
import java.net.*;
import java.io.*;
public class SocketClientTest
{
public static final int PORT = 8088;
public static void main( String[] args ) throws Exception
{
InetAddress addr = InetAddress.getByName( "127.0.0.1" );
Socket socket = new Socket();
try
{
socket.connect( new InetSocketAddress( addr, PORT ), 30000 );
socket.setSendBufferSize(100);

BufferedWriter out = new BufferedWriter( new OutputStreamWriter( socket.getOutputStream() ) );
int i = 0;

while( true )
{
System.out.println( "client sent --- hello *** " + i++ );
out.write( "client sent --- hello *** " + i );
out.flush();

Thread.sleep( 1000 );
}
}
finally
{
socket.close();
}
}
}

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServerTest
{
public static final int PORT = 8088;
public static final int BACKLOG = 2;
public static void main( String[] args ) throws IOException
{
ServerSocket server = new ServerSocket( PORT, BACKLOG );
System.out.println("started: " + server);
try
{
Socket socket = server.accept();
try
{
BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream() ) );
String info = null;

while( ( info = in.readLine() ) != null )
{
System.out.println( info );
}
}
finally
{
socket.close();
}
}
finally
{
server.close();
}
}
}

閱讀全文

與tcp套接字編程java相關的資料

熱點內容
均線衍生指標源碼設置 瀏覽:494
做精一張圖pdf 瀏覽:849
編程培訓小朋友 瀏覽:785
巴克球製作解壓 瀏覽:849
測量參數時接單片機的 瀏覽:114
手機音樂添加文件夾 瀏覽:544
百度智能雲b18怎麼刪除app 瀏覽:966
單片機中為什麼顯示找不到頭文件 瀏覽:149
iisweb伺服器如何重啟 瀏覽:836
微信沒有適配方舟編譯器 瀏覽:79
箍筋加密區梁的凈高 瀏覽:887
samp如何加入外國伺服器 瀏覽:893
保鮮膜解壓教學視頻 瀏覽:981
台達plc編程通訊管理軟體 瀏覽:405
優優pdf 瀏覽:799
程序員職業穿搭 瀏覽:255
程序員軟考大綱 瀏覽:17
命令窗口輸入後不滾動 瀏覽:639
C面向切面編程aop例子 瀏覽:369
windowsrar命令 瀏覽:380