欢迎来到天天文库
浏览记录
ID:30805531
大小:171.76 KB
页数:15页
时间:2019-01-03
《如何为可扩展系统进行socket编程-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、如何为可扩展系统进行Socket编程・编程开发技术如何为可扩展系统进行Socket编程木文由ImportNew・乔永琪翻译自javaworldo欢迎加入翻译小组。转载请见文末要求。从简单I/O到异步非阻塞channel的JavaSocket模型演变之旅上世纪九十年代后期,我在一家在线视频游戏工资工作,在哪里我主要的工作就是编写UnixUnixBerkleySocket和WindowsWinSock代码。我的任务是确保视频游戏客户端和一个游戏服务器通信。很幸运有这样的机会写一些JavaSocket代码,我对Java流式网络编程和简洁明了的API着迷。这一点都不让人惊讶,
2、Java最初就是设计促进智能设备Z间的通信,这一点很好的转移到了桌面应用和服务器应用。1996年,JavaWorld刊登了QusayH.Mahmoud的文章《SocketsprogramminginJava:Atutorial》。文章概述了Java的Socket编程模型。从那以后的18年,这个模型少冇变化。这篇文章依然是网络系统Javasocket编程的入门经典。我将在此基础Z上,首先列出一个简单的客户端/服务器例了,开启JavaI/O谦卑之旅。此例展示来自java,io包和N10Javal.4引起的新的非阻塞1/0API的特性,最后一个例子会涉及Java7引入的NI
3、02某些特性。Java的Socket编程:TCP和UDPSocket编程拆分为两个系统Z间的相互通信,网络通信有两种方式:ransportControlProtocol(TCP)和UserDatagramProtocol(UDP)。TCP和UDP用途不一,并且有各口独特的约束:•?TCPI办议相对简单稳定,可以帮助客户端与一台服务器建立连接,这样两个系统就可以通信。在TCP协议屮,每个实体都能保证其通信载荷(communicationpayload)会被接受。•?UDP是一种非连接协议,适用于那些无需保证每个包都能抵达终点的场景,比如流媒体。如何区分这两者的差异?试想
4、,倘若你在自己喜欢的网站上观看流媒体视频,这时掉帧会发生什么。你是倾向于客户端放缓视频接收丢失的帧,还是继续观看视频呢?典型的流媒体协议采用UDP协议,因为TCP协议保障传输,HTTP、FTP、SMTIPOP3等协议会选择TCP。以往的Socket编程早在NIO以而,JavaTCP客户端socket代码主耍
5、±
6、java.net.Socket类來实现。下而的代码开启了一个对服务器的连接:Socketsocket二newSocket(server,port);一旦Socket实例与服务器相连,我们就可以获得服务器端的输入输出流。输入流用來读取服务器端的数据,输出流用来
7、将数据写回到服务器端。可以执行以下的方法获取输入输出流:InputStreamin二socket・getlnputStream();Outputstreamout=socket.getOutputStreamO;这是基木的流一一用来读取或者写入一个文件的流是相同的,所以我们能够将其转换成最好的形式服务于用例中。比如,我们叮以用一个PrintStream包装OutputStrcam,这样我们就能轻易地用printlnO等方法对文本进行写的操作。再比如,我们用BufferedReader包装InputStream,再通过InputStreamReader可以很容易的用re
8、adLineO等方法对文木进行读操作。JavaI/O示例第一部分:HTTP客户端通过一个简短的例了來看如何执行HTTPGET获取一个HTTP服务。HTTP比本例更加复杂成熟,在我们只写一个客户端代码去处理简单案例。发岀一个请求,从服务器端获取一个资源,同时服务器端返冋响应,并关闭流。本案例所需的步骤如下:1.创建端口为80的网络服务器所对•应的客户端Socket-2.从服务器端获取一个PrintStream,同时发送一个GETPATHHTTP/1.0请求,其屮PATH就是服务器上的请求资源。比如,假设你想打开一个网站根目录,那么path就是/03.获取服务器端的Inp
9、utStream,用一个BufferedReader将其包装,然后按行读取响应。列表1、SimpleSocketClientExample・javapackagecom・gcckcap・javaworld・simplcsocketclient;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.PrintStream;importjava.net.Socket;publicclassSimpleSocketClientExamplepublicstati
此文档下载收益归作者所有