导航:首页 > 编程语言 > 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相关的资料

热点内容
使用过的苹果手机怎么同步app 浏览:344
phpcookie无效 浏览:954
python可以搜数学答案 浏览:706
均线衍生指标源码设置 浏览:496
做精一张图pdf 浏览:851
编程培训小朋友 浏览:787
巴克球制作解压 浏览:851
测量参数时接单片机的 浏览:116
手机音乐添加文件夹 浏览:546
百度智能云b18怎么删除app 浏览:968
单片机中为什么显示找不到头文件 浏览:151
iisweb服务器如何重启 浏览:838
微信没有适配方舟编译器 浏览:81
箍筋加密区梁的净高 浏览:889
samp如何加入外国服务器 浏览:895
保鲜膜解压教学视频 浏览:983
台达plc编程通讯管理软件 浏览:405
优优pdf 浏览:801
程序员职业穿搭 浏览:257
程序员软考大纲 浏览:19