`
bigfang
  • 浏览: 40486 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

学习通信基础感悟1

阅读更多
   
    这几天,初学基础通信,我对这方面的概念,以前没有怎么了解。所以,目前只是大致了解。

1.对客户端与服务器的理解:
    在通信方面,经常举打电话的例子。比如,a向b打电话,那么a是客户端,b是服务器。先向对方发送连接请求的称为客户端。b的手机开机在线,等价于这个端口的服务器已建立,停留在accept等待连接,第一个阻塞状态的时机。此时,a向b连接成功后,b可以先向所有的客户端,发送相同的问候词,比如“你好”。然后,b停留在读取a的信息,第二个阻塞状态的时机。然后,两者,就可以进行交流了。两者对话,可以制定,发送一句话的结束协议,还有最后双方结束对话的协议,即双方断开连接。

2.ServerSocket与Socket
    一开始,对ServerSocket、Socket这两个词,有种十分陌生的感觉,这英语似乎很难理解。中文翻译,也不是很直观:服务器套接字,还需要对套接字这个词再做了解。在慢慢地学习中,大致,把ServerSocket认为一个服务器,而Socket作为一个客户端与服务器的连接媒介,可从这个载体上获得输入和输出流。

3.几个异常:
在通信这部分,异常比以前多了,我的程序中,最常见的就是
   (1)java.net.BindException: Address already in use: JVM_Bind,连接了一个已经占用的端口。
   (2)java.net.SocketException: Socket closed。当服务器在accept或者read阻塞状态时,关闭服务器产生的异常。

   当发现异常时,最好及时测试理解,那么,以后遇到,也能安然处之、不足为奇了。

前面基础部分中有:
   (1)数组越界
   (2)内存溢出,栈溢出一般是死循环,而堆溢出,可能是程序员申请分配的内存,超过了JAVA虚拟机的初始限制值.
  (3)空指针异常,没有创建对象,对象为null。
    ……

4.实现字符串的整句输出、多个客户端与服务器连接
    服务器创建使用telnet命令。
    (1)处理阻塞的方法是多线程的客户端,使各自的阻塞影响不了其他客户端。
    (2)这里,处理比较久的是读键盘的输入,Windows中,按Enter键,先后读入两个字节:回车13(CR-carriage return)、换行10(LF-line feed,NL new line),而右边数字键盘的Enter,只有一个字节10。所以,当制定每句话的结束标志是回车键时,要考虑一下按回车键的第二个字节10的处理。

5.String与StringBuffer
   字符串缓冲区StringBuffer与String的一个区别是:String不可改变,即若要改变String,则要new一个新的String对象,而StringBuffer称为可改变类,它是默认先分配大小为16的空间,方法append()、ingsert()等等,当空间不足时,才new一个新的2倍原来size+1的对象。StringBuffer某些方法可能还是会new一个新的对象,比如subString()。所以,在多次改变String的情况下,StringBuffer比String性能更好。

6.为简单的服务器,添加界面,服务器启停控制
    为了服务器的阻塞不影响界面的控制,所以,将创建服务器,写成了一个线程。这加强了对线程的使用和了解,线程中等待,Thread.sleep(100);让线程休眠,放弃CPU,线程进入阻塞状态。


    在学习中,还有
(1)方法声明、如何写负责的注释;
(2)发送消息时,字符的编码、解码问题,有编码就必然有对应的解码;
(3)阻塞问题,可用多线程处理;
(4)封装概念,类功能单一,可扩展,严谨;这个,非一日之成。
(5)正在考虑的启停机制。
    这些慢慢学吧。




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics