学习通信基础感悟1

本文介绍了通信基础的概念,包括客户端与服务器的工作原理、ServerSocket与Socket的区别及应用,并探讨了异常处理、多线程技术的应用、字符串操作以及服务器界面的设计。
这几天,初学基础通信,我对这方面的概念,以前没有怎么了解。所以,目前只是大致了解。

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)正在考虑的启停机制。
这些慢慢学吧。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值