TCP/IP Sockets in Java, 2rd Edition
Contents
Preface xi
1 Introduction 1
1.1 Networks, Packets, and Protocols 1
1.2 About Addresses 4
1.3 About Names 6
1.4 Clients and Servers 6
1.5 What Is a Socket? 7
1.6 Exercises 8
2 Basic Sockets 9
2.1 Socket Addresses 9
2.2 TCP Sockets 15
2.2.1 TCP Client 16
2.2.2 TCP Server 21
2.2.3 Input and Output Streams 25
2.3 UDP Sockets 26
2.3.1 DatagramPacket 27
2.3.2 UDP Client 29
2.3.3 UDP Server 34
2.3.4 Sending and Receiving with UDP Sockets 36
2.4 Exercises 38
3 Sending and Receiving Data 39
3.1 Encoding Information 40
3.1.1 Primitive Integers 40
3.1.2 Strings and Text 45
3.1.3 Bit-Diddling: Encoding Booleans 47
3.2 Composing I/O Streams 48
3.3 Framing and Parsing 49
3.4 Java-Specific Encodings 55
3.5 Constructing and Parsing Protocol Messages 55
3.5.1 Text-Based Representation 58
3.5.2 Binary Representation 61
3.5.3 Sending and Receiving 63
3.6 Wrapping Up 71
3.7 Exercises 71
4 Beyond the Basics 73
4.1 Multitasking 73
4.1.1 Java Threads 74
4.1.2 Server Protocol 76
4.1.3 Thread-per-Client 80
4.1.4 Thread Pool 82
4.1.5 System-Managed Dispatching: The Executor Interface 84
4.2 Blocking and Timeouts 86
4.2.1 accept(), read(), and receive() 87
4.2.2 Connecting and Writing 87
4.2.3 Limiting Per-Client Time 87
4.3 Multiple Recipients 89
4.3.1 Broadcast 90
4.3.2 Multicast 90
4.4 Controlling Default Behaviors 95
4.4.1 Keep-Alive 96
4.4.2 Send and Receive Buffer Size 96
4.4.3 Timeout 97
4.4.4 Address Reuse 97
4.4.5 Eliminating Buffering Delay 98
4.4.6 Urgent Data 98
4.4.7 Lingering after Close 99
4.4.8 Broadcast Permission 99
4.4.9 Traffic Class 100
4.4.10 Performance-Based Protocol Selection 100
4.5 Closing Connections 101
4.6 Applets 107
4.7 Wrapping Up 107
4.8 Exercises 108
5 NIO 109
5.1 Why Do We Need This? 109
5.2 Using Channels with Buffers 112
5.3 Selectors 115
5.4 Buffers in Detail 121
5.4.1 Buffer Indices 121
5.4.2 Buffer Creation 122
5.4.3 Storing and Retrieving Data 124
5.4.4 Preparing Buffers: clear(), flip(), and rewind() 126
5.4.5 Compacting Data in a Buffer 128
5.4.6 Buffer Perspectives: duplicate(), slice(), etc. 129
5.4.7 Character Coding 131
5.5 Stream (TCP) Channels in Detail 132
5.6 Selectors in Detail 135
5.6.1 Registering Interest in Channels 135
5.6.2 Selecting and Identifying Ready Channels 138
5.6.3 Channel Attachments 140
5.6.4 Selectors in a Nutshell 140
5.7 Datagram (UDP) Channels 141
5.8 Exercises 145
6 Under the Hood 147
6.1 Buffering and TCP 150
6.2 Deadlock Danger 152
6.3 Performance Implications 155
6.4 TCP Socket Life Cycle 155
6.4.1 Connecting 156
6.4.2 Closing a TCP Connection 160
6.5 Demultiplexing Demystified 163
6.6 Exercises 165
Bibliography 167
Index 169
Advanced Data Structures
里面讲述了许多特殊的索引树结构,推荐!
Preface page xi
1 Elementary Structures 1
1.1 Stack 1
1.2 Queue 8
1.3 Double-Ended Queue 16
1.4 Dynamical Allocation of Nodes 16
1.5 Shadow Copies of Array-Based Structures 18
2 Search Trees 23
2.1 Two Models of Search Trees 23
2.2 General Properties and Transformations 26
2.3 Height of a Search Tree 29
2.4 Basic Find, Insert, and Delete 31
2.5 Returning fromLeaf to Root 35
2.6 Dealing with Nonunique Keys 37
2.7 Queries for the Keys in an Interval 38
2.8 Building Optimal Search Trees 40
2.9 Converting Trees into Lists 47
2.10 Removing a Tree 48
3 Balanced Search Trees 50
3.1 Height-Balanced Trees 50
3.2 Weight-Balanced Trees 61
3.3 (a, b)- and B-Trees 72
3.4 Red-Black Trees and Trees of Almost Optimal Height 89
3.5 Top-Down Rebalancing for Red-Black Trees 101
3.6 Trees with Constant Update Time at a Known Location 111
3.7 Finger Trees and Level Linking 114
vii
3.8 Trees with Partial Rebuilding: Amortized Analysis 119
3.9 Splay Trees: Adaptive Data Structures 122
3.10 Skip Lists: Randomized Data Structures 135
3.11 Joining and Splitting Balanced Search Trees 143
4 Tree Structures for Sets of Intervals 148
4.1 Interval Trees 148
4.2 Segment Trees 154
4.3 Trees for the Union of Intervals 162
4.4 Trees for Sums of Weighted Intervals 169
4.5 Trees for Interval-Restricted Maximum Sum Queries 174
4.6 Orthogonal Range Trees 182
4.7 Higher-Dimensional Segment Trees 196
4.8 Other Systems of Building Blocks 199
4.9 Range-Counting and the Semigroup Model 202
4.10 kd-Trees and Related Structures 204
5 Heaps 209
5.1 Balanced Search Trees as Heaps 210
5.2 Array-Based Heaps 214
5.3 Heap-Ordered Trees and Half-Ordered Trees 221
5.4 Leftist Heaps 227
5.5 Skew Heaps 235
5.6 Binomial Heaps 239
5.7 Changing Keys in Heaps 248
5.8 Fibonacci Heaps 250
5.9 Heaps of Optimal Complexity 262
5.10 Double-Ended Heap Structures and Multidimensional
Heaps 267
5.11 Heap-Related Structures with Constant-Time Updates 271
6 Union-Find and Related Structures 278
6.1 Union-Find: Merging Classes of a Partition 279
6.2 Union-Find with Copies and Dynamic Segment Trees 293
6.3 List Splitting 303
6.4 Problems on Root-Directed Trees 306
6.5 Maintaining a Linear Order 317
7 Data Structure Transformations 321
7.1 Making Structures Dynamic 321
7.2 Making Structures Persistent 330
8 Data Structures for Strings 335
8.1 Tries and Compressed Tries 336
8.2 Dictionaries Allowing Errors in Queries 356
8.3 Suffix Trees 360
8.4 Suffix Arrays 367
9 Hash Tables 374
9.1 Basic Hash Tables and Collision Resolution 374
9.2 Universal Families of Hash Functions 380
9.3 Perfect Hash Functions 391
9.4 Hash Trees 397
9.5 Extendible Hashing 398
9.6 Membership Testers and Bloom Filters 402
10 Appendix 406
10.1 The Pointer Machine and Alternative Computation
Models 406
10.2 External Memory Models and Cache-Oblivious
Algorithms 408
10.3 Naming of Data Structures 409
10.4 Solving Linear Recurrences 410
10.5 Very Slowly Growing Functions 412
11 References 415
Author Index 441
Subject Index 455