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

上传人:qwe****56 文档编号:70020838 上传时间:2023-01-14 格式:PDF 页数:6 大小:232.08KB
返回 下载 相关 举报
51CTO下载-Java Socket编程 最简单CS程序示例.pdf_第1页
第1页 / 共6页
51CTO下载-Java Socket编程 最简单CS程序示例.pdf_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《51CTO下载-Java Socket编程 最简单CS程序示例.pdf》由会员分享,可在线阅读,更多相关《51CTO下载-Java Socket编程 最简单CS程序示例.pdf(6页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、JavaJavaJavaJava SocketSocketSocketSocket CSCSCSCS 示例程序示例程序1 1 1 1 背景介绍背景介绍Java 是随着网络的盛行而逐渐被人认可的,可想而知其网络编程的能力有多强大。本文介绍一个 Java Socket CS 模型的一个简单示例,简单但不低端。程序是在本地模拟 CS 模型,即服务端和客户端两个程序可以相互通信。实现形式是两个程序分别定义好要说的话,然后按顺序交互在终端打印。2 2 2 2 SocketSocket 通信过程通信过程真实中的通信类似 QQ 是两个或多个程序在不同的电脑上,通过互联网交换信息。程序间是通过通过(IP 地址

2、:端口号)的形式来实现互相访问的。那么两个程序在本地又是怎么能互相连接的,又是如何交换信息的?仔细看上图,首先建立监听程序 SeverSocket()来作为服务端,服务端调用accept()方法不断在所设端口监听是否有要求连接的请求。此时建立客户端程序,该客户端是以发送 Socket()套接字的方式建立的。客户端往所设端口去请求服务,如果遇到 accept(),则双方达成连接共识于是建立连接。连上之后,双方是通过发送 socket 套接字来实现交流的。套接字封装了网络通信底层包括协议,端口地址等信息。客户端要发送信息,其次用建立输出流,输出流另外一段是 socket 套接字,只要往该流里面 p

3、rintln()数据,则会自动封装到该套接字里面。发送时,将 socket套接字发送给服务端。服务端收到套接字,从套接字找到携带的信息放入输入流,然后输入流端通过 readLine()就可以直接将信息打印在屏幕上了。此时服务端要往客户端发送信息,过程一样,将信息写入输出流,然后封装成套接字,对方接受套接字,将信息放到输出流,然后就能输出该信息了。套接字起到了封转底层的作用,程序互联变得很容易,而用输入输出流连接中介转接套接字,一是套接字无法直接输出内容,二是通过流的形式输入输出信息,是 Java 推荐的,因为其本身包含大量方法,用起来会非常得心应手。最后,要关闭连接要释放端口等资源。3 3 3

4、 3 示例过程介绍示例过程介绍本段通过具体例子来加深读者对 Socket 通信过程的印象。1)建立服务器 ServerSocket()2)服务器调用 accept()方法来监听 9999 端口。3)建立客户端 Socket,往 9999 端口发送套接字,请求连接。4)服务器 accept()方法收到一个套接字,说是某某程序想要跟服务器建立连接。accept()接受该请求,于是俩程序建立连接。5)现在客户机想给服务器发送一个字符串“你好,我是客户机”。首先客户机将该字符串用 Println()封装到输出流 PrintWriter 里面,PrintWriter 将该信息再封装到套接字 socket

5、 里面。于是再向服务器端口发送套接字。6)服务器端口又接到套接字,将该套接字放到 InputStreamReader 里面解封装,再用 readLine()方法读取里面的字符串,print()到屏幕上面,打印出“你好,我是客户机”。7)服务器想回送客户机一个信息,如“我是服务器,你发来的信息已收到”。同样是将该字符串封装到输出流 PrintWriter 里面,该输出流再封装成套接字 socket,发送给客户端。8)客户端同样是接收该套接字,解封装到输入流 InputStreamReader,然后再从该流里面 readLine()取出信息,print()打印到屏幕,出来“我是服务器,你发来的信息

6、已收到”的信息。如此可实现反复的半双工通信。9)双方用 close()方法释放连接。4 4 4 4 完整代码完整代码服务器端程序服务器端程序(tempServer)(tempServer)5packagepackagepackagepackage com.futeng.temp;6/*7*内容:Java Socket编程示例(futeng)8*制作:futeng#1.0/2012/07319*说明:10*/11importimportimportimport java.io.BufferedReader;12importimportimportimport java.io.InputStrea

7、mReader;13importimportimportimport java.io.PrintWriter;14importimportimportimport .*;1516publicpublicpublicpublic classclassclassclass tempServer 17/*18*服务端Server客户端Client19*20*服务器监听ServerSocekt()21*|22*阻塞,等待客户连接accept()-发送连接请求Socket()23*|24*|25*读取客户端所发送的数据readLine()读取服务端信息readLine()28*|29*关闭连接close

8、()关闭连接close()30*31*/32publicpublicpublicpublic tempServer()3334trytrytrytry35/建立服务器端程序serversocket,并默认不断扫描8888端口。36ServerSocket serversocket=newnewnewnew ServerSocket(8888);37System.out.println(Hi,我是服务器,正在监听8888端口.);3839/Java用Socket套接字封装了底层的协议端口等,换而言之,两个进程都是通过传递套接字来进行通信。40/声明一个Socket类的套接字来存储来往信息41/a

9、ccept()方法返回接收到的套接字,返回值类型为Socket类,刚好赋值给socket实例对象。42Socket socket=serversocket.accept();4344/服务器端接受从客户端发送过来的数据。套接字不能直接打开,需要用输入流的方式打开。45/建立输入流InputStreamRead实例in来存储从客户端发送过来的套接字46InputStreamReader isr=newnewnewnew InputStreamReader(socket.getInputStream();47/用BufferRead类来封装下该输入流类isr实例。封装的目的在于BufferRead

10、类可以很容易的输出信息。48BufferedReader in=newnewnewnew BufferedReader(isr);49/BufferRead类方法readLine()来接受数据并处理为String型50String info=in.readLine();51System.out.println(服务器:我收到来自客户端的信息为-+info);5253/服务器往客户机输出信息54PrintWriter out=newnewnewnew PrintWriter(socket.getOutputStream(),truetruetruetrue);55out.println(我是服务

11、器,这是我发给客户机的信息。);5657catchcatchcatchcatch(Exception e)5859e.printStackTrace();60616263publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid main(String args)6465tempServer ts=newnewnewnew tempServer();666768客户端程序(客户端程序(tempClienttempClienttempClienttempClient)69packagepackagepackagepacka

12、ge com.futeng.temp;7071importimportimportimport .*;72importimportimportimport java.io.*;7374publicpublicpublicpublic classclassclassclass tempClient 75publicpublicpublicpublic tempClient()7677trytrytrytry78/建立客户端程序,Socket套接字有一套完整的传输机制。79/建立一个Socket来请求连接服务器端,80/此处Socket寻找的是本机localhost中的8888端口。81/如果一旦

13、发现该端口被监听,则socket立即与之产生联系,于是就可以互相通信。82Socket socket=newnewnewnew Socket(127.0.0.1,8888);8384/客户端往socket里面输出信息,服务器接收socket然后阅读里面信息。socket起到的是封装作用。85/socket通过输出流将数据写入86/因为不能直接往套接字里面写数据,所以需要建一个输出流,建PrintWriter类实例out,这个out是连接套接字的输出流的。87/即往out里面写数据,就相当于写入了该套接字88PrintWriter out=newnewnewnew PrintWriter(soc

14、ket.getOutputStream(),truetruetruetrue);89out.println(我是客户端,我正往服务器输出数据.);9091/客户端接受服务器发送的信息92InputStreamReader isr=newnewnewnew InputStreamReader(socket.getInputStream();93BufferedReader in=newnewnewnew BufferedReader(isr);9495/接受信息从服务器96String info=in.readLine();97System.out.println(我是客户机,服务器给我发送的信

15、息是:+info);9899100101102catchcatchcatchcatch(Exception e)103104e.printStackTrace();105106107108109publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid main(String args)110111tempClient tc=newnewnewnew tempClient();112113 5 5 运行方法运行方法在 Eclipse 中运行,新建一个项目,在 src 目录下新建两个文件 class,分别命名为 tempS

16、erver 和 tempClient,并且修改源代码包为你的包名。即修改首行packagepackagepackagepackage com.futeng.temp;为你的包,如你的包名为 com.abc.test 则修改为packagepackagepackagepackage com.abc.test;。先运行 Server 再运行 tempClient,这是你就会看到如下输出。运行服务器端运行客户机端停止程序后输出6 6 结束语结束语文章发布地址:http:/ 科技新浪博客问题与留言访问:FUTENG 科技新浪微博欢迎访问与支持 FUTENG 官方网站的建设,你还可以下载本博客的安卓客户端。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com