作者givemepass (〆)
看板java
标题Re: [问题] 请问这个程式是在...?
时间Mon Jun 13 10:19:06 2011
※ 引述《love2010 (阿霍)》之铭言:
: http://imageshack.us/photo/my-images/838/dsc01362qp.jpg
: 问了一些朋友他们都只知道大概
: 可是问他们每一行是甚麽意思又讲不出来...囧
: 可以帮我注解每一行的功能吗 谢谢 ORZ
: PS 我看得懂的大概只有一半而已,但是又不确定是对还错
: 所以还是可以的话麻烦整个注解..-3-
: 感恩!!
看程式码说故事的时间到了
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args) throws Exception{
//宣告一个存放使用者输入的字串
String sentence;
//从伺服端传回来的字串
String modifiedSentence;
/*
* I/O Stream
* 你可以把网路传输看成输入跟输出,
* 当网路传资讯过来,
* 对你而言可以想成有东西要进来了,
* 因此是输入,
* 而你要传送东西出去,因此是输出,
*
* 串流你可以想像一条传输带,
* 必须用传输带规定的箱子来传输,
* 跟接收端说,我有东西要给你,
* 传输带拉起来(socket开启),
* 接收端回应没问题,就建立好连线了!
* 然後在跟接收端说,
* 我的货品包装好了,你要收好喔!
* 接着接收端就说OK,就开始接收了!
* 接收完了,就跟传送端说:都收到了!
* 传送端就会把传输带收起来。
*
* 各种串流
* 至於接收端收到资料的时候,
* 就会用各种工具把货品打开来,
* 然後将里面的东西加工好了,
* 再用规定的箱子包好,
* 又重复上面那些步骤,
* 再一次建立连线,传送,关闭。
*
* 缓冲
* 有时候为了加速传送,
* 接收端可能有很多事情要忙,
* 但是每次传送端都会送一个东西过来,
* 接收端就必须去签收,
* 很没有效率,因此会开一个仓库,
* 跟传送端说,你把这个仓库装满以後,
* 我再来签收,如此一来,
* 我只需要等仓库装满,再来收就好了,
* 那其他时间我可以处理其他的事情,提高效率。
*
* 压缩
* 有时候一个箱子其实装的物品没有那麽多,
* 还留有很多空间,
* 那麽我们就会想说,
* 一次传一个箱子过去只装一个东西,
* 有点浪费,
* 因此就会想要把一个箱子里面剩余的空间都装满,
* 这样一次就可以传很多个物品过去,
* 提高了效率。
*
*
*/
BufferedReader inFromUser = new BufferedReader(
new InputStreamReader(System.in));
/* socket
* 如果我们要把一些资料传到网路的另外一端,
* 我们会将资料包装成封包,称做Datagram,
* 每一个封包容量有限,
* 其中结构分为标头(header)跟资料(payload)
* 通常一段资料会切成很多个封包,
* 接收到的资料不一定要照顺序,
* 而接收的那端必须有能力可以把这些封包,
* 根据资讯来排列它的顺序,
* 有时候也会漏掉几个封包没接收到,
* 这时候会要求再重送一次,
* 这些过程是很复杂的,
* 因此socket都帮你包好了,
* 你不用自己去处理这些过程。
* socket可以看成两端的一个连线,
* 你只需要告知要连线的host以及port
*/
Socket clientSocket = new Socket("hostname", 6789);
/* 传送资料
* getOutputStream()
* 这个方法会传回一个OutputStream,
* 让你的程式能够用来写出资料到socket的另一端,
* 在使用此串流之前,
* 通常会将它串接到其他比较方便的串流,
* 像是DataOutputStream或OutputStreamWriter,
* 有时候考虑到效能,我们也会把它串接到缓冲串流。
*/
DataOutputStream outToServer = new DataOutputStream(
clientSocket.getOutputStream());
/* 接收资料
* getInputStream()方法
* 会回传一个能从Socket读入资料的输入串流,
* 你通常可以把这个InputStream,串接到一个滤器串流或reader,
* 例如DataInputStream或InputStreamReader,
* 以便在读入资料之前,
* 将资料转换成适合程式处理的形式,此外,
* 如果把输入串流接到BufferedInputStream
* 或BufferedReader之类的缓冲器,
* 将可大幅提升效能。
*/
BufferedReader inFromServer =
new BufferedReader(
new InputStreamReader(
clientSocket.getInputStream()));
//从串流中读取使用者输入的字串
sentence = inFromUser.readLine();
//从串流中传送使用者字串到伺服端
outToServer.writeBytes(sentence + "\n");
//从伺服端接收回传的字串
modifiedSentence = inFromServer.readLine();
//从伺服器传回来的字串显示出来
System.out.println("FROM Server:" + modifiedSentence);
//关闭了连线
clientSocket.close();
}
}
观念有错请指教 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.221.115.4
1F:推 love2010:谢谢大大!! 06/13 10:34
2F:推 belion:好人!且好强! 06/13 11:41
3F:推 lf21201:用语很简单:) 推 06/14 11:27
※ 编辑: givemepass 来自: 219.84.185.213 (06/14 22:20)
4F:推 benjumin:推一个 06/15 22:08
5F:推 n823n823:感谢~! 06/20 22:17