51CTO下载-Java Socket编程 最简单CS程序示例.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:6 大小:232KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

51CTO下载-Java Socket编程 最简单CS程序示例.pdf

51CTO下载-JavaSocket编程最简单CS程序示例.pdf

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

JavaSocketCS示例程序1背景介绍Java是随着网络的盛行而逐渐被人认可的,可想而知其网络编程的能力有多强大。本文介绍一个JavaSocketCS模型的一个简单示例,简单但不低端。程序是在本地模拟CS模型,即服务端和客户端两个程序可以相互通信。实现形式是两个程序分别定义好要说的话,然后按顺序交互在终端打印。2Socket通信过程真实中的通信类似QQ是两个或多个程序在不同的电脑上,通过互联网交换信息。程序间是通过通过(IP地址:端口号)的形式来实现互相访问的。那么两个程序在本地又是怎么能互相连接的,又是如何交换信息的?仔细看上图,首先建立监听程序SeverSocket()来作为服务端,服务端调用accept()方法不断在所设端口监听是否有要求连接的请求。此时建立客户端程序,该客户端是以发送Socket()套接字的方式建立的。客户端往所设端口去请求服务,如果遇到accept(),则双方达成连接共识于是建立连接。连上之后,双方是通过发送socket套接字来实现交流的。套接字封装了网络通信底层包括协议,端口地址等信息。客户端要发送信息,其次用建立输出流,输出流另外一段是socket套接字,只要往该流里面println()数据,则会自动封装到该套接字里面。发送时,将socket套接字发送给服务端。服务端收到套接字,从套接字找到携带的信息放入输入流,然后输入流端通过readLine()就可以直接将信息打印在屏幕上了。此时服务端要往客户端发送信息,过程一样,将信息写入输出流,然后封装成套接字,对方接受套接字,将信息放到输出流,然后就能输出该信息了。套接字起到了封转底层的作用,程序互联变得很容易,而用输入输出流连接中介转接套接字,一是套接字无法直接输出内容,二是通过流的形式输入输出信息,是Java推荐的,因为其本身包含大量方法,用起来会非常得心应手。最后,要关闭连接要释放端口等资源。3示例过程介绍本段通过具体例子来加深读者对Socket通信过程的印象。1)建立服务器ServerSocket()2)服务器调用accept()方法来监听9999端口。3)建立客户端Socket,往9999端口发送套接字,请求连接。4)服务器accept()方法收到一个套接字,说是某某程序想要跟服务器建立连接。accept()接受该请求,于是俩程序建立连接。5)现在客户机想给服务器发送一个字符串“你好,我是客户机”。首先客户机将该字符串用Println()封装到输出流PrintWriter里面,PrintWriter将该信息再封装到套接字socket里面。于是再向服务器端口发送套接字。6)服务器端口又接到套接字,将该套接字放到InputStreamReader里面解封装,再用readLine()方法读取里面的字符串,print()到屏幕上面,打印出“你好,我是客户机”。7)服务器想回送客户机一个信息,如“我是服务器,你发来的信息已收到”。同样是将该字符串封装到输出流PrintWriter里面,该输出流再封装成套接字socket,发送给客户端。8)客户端同样是接收该套接字,解封装到输入流InputStreamReader,然后再从该流里面readLine()取出信息,print()打印到屏幕,出来“我是服务器,你发来的信息已收到”的信息。如此可实现反复的半双工通信。9)双方用close()方法释放连接。4完整代码服务器端程序(tempServer)5packagecom.futeng.temp;6/*7*内容:JavaSocket编程示例(@futeng)8*制作:@futeng#1.0/2012/07319*说明:10*/11importjava.io.BufferedReader;12importjava.io.InputStreamReader;13importjava.io.PrintWriter;14importjava.net.*;1516publicclasstempServer{17/*18*服务端Server客户端Client19*20*服务器监听ServerSocekt()21*|22*阻塞,等待客户连接accept()<--------发送连接请求Socket()23*||24*||25*读取客户端所发送的数据readLine()<--------向服务端发送数据Println()26*||27*向客户端发送数据Println------------>读取服务端信息readLine()28*||29*关闭连接close()关闭连接close()30*31*/