◇ 网络协议
◇ 端口
◇ IP
◇ TCP
☆ 什么是TCP
TCP是大名鼎鼎的网络通讯协议,面向连接的。
什么是面向连接,就是你需要建立一个连接通道来通讯,传输数据的时候,就用TCP。
TCP的形象比喻就是打电话。
☆ TCP的特点
socket中文翻译是套接字,套接字就是一对地址和端口号。
就是数据的出入口。
socket.getInputStream,这是拿到的字节流数据,至于怎么拿到的就是封装在底层的事情了,不作探讨。
因为TCP的数据传输是建立了虚拟连接的,也就是说数据传输是有一个虚拟通道的。
发送数据的时候,就用socke.getOutputStream拿到发送的流数据,然后
再用打印流PrintWriter封装一下OutputStream字节流,用这个封装流就可以方便地传输字符串等等数据了。
再简单啰嗦一句,流这个东西,其实也可以理解成为一个容器。你需要将不同种类的数据放入到流中,然后进行处理传输。
这个时候就有两种办法,一个是进行数据类型转换,一个是进行流的封装。
很明显地,进行流的封装进行数据的传输比较简单粗暴。很方便的。
☆ TCP演绎
TCP的编程演绎过程是这样的:
1.发送接收模式
写一个客户端只有发送数据,一个服务端只有接收数据,这就是一个单向通信的过程。
2.问答模式
写一个客户端包含发送和接收,一个服务端包含接收和发送,那么这就是【一次问答模式】
3.加入循环
写一个客户端只有发送数据,一个服务端只有接收数据,然后都加上循环while(true){},这就是一个【循环多次问答模式】
4.加入循环和多线程
写一个客户端类,一个服务端类,一个发送数据线程类,一个接收数据线程类。然后在客户端类当中写入启动两个线程,在服务端当中也启动两个线程。在两个线程类当中都加入循环,这样就能够实现【类似QQ的问答模式】
在这里要注意的问题是:
1.TCP中的发送消息
PrintWriter pw=null;
pw=new PrintWriter(socket.getOutputStream;)
2.TCP中的接收消息
BufferedReader br=null;
br=new BufferedReader(new inputStreamReader(socket.getInputStream));
同时要注意,键盘录入的时候,也是上述的语句。
◇ UDP
☆ 什么是UDP
UDP是另一种类的网络协议,用”发短信”来比喻是很恰当的。
即时通讯(IM)软件很多都是基于UDP协议的。
☆ UDP有什么特点,和TCP有什么区别
UDP在进行通讯的过程中是不建立连接的。没有像TCP当中的【虚拟通道】这个东西。
UDP的套接字的类也和TCP是不一样的,叫DatagramSocket类,在客户端和服务端都是用这个类来封装套接字的
从这里就可以看出来,在建立了”连接对应关系”之后,其实两端就没有什么客户端和服务端的区分了,两者是一样的。
它不像TCP,客户端的套接字类是Socket类,服务端的套接字类是ServerSocket类。
UDP真正的建立连接关系,和发送数据,是通过【数据报包】。
这可以形象地想象成一个包裹,里面打包的都是要发送的数据,同时也把IP和port都放进去了。也就是说,在这个包裹上面写了地址和收件人了。然后就一股脑儿全部扔出去。至于能不能实实在在到达收件人的手中,那就两说了。数据通过网络路由线路,一直传送,中间要是保不齐出事了,包裹就丢了,那也是一点办法也没有的。
在这里可以仔细想想,TCP建立连接通道的时候,是在两个套接字当中传入IP和port号。这就是表示建立了真正的连接。
UDP就不一样了,它把它的IP和port全都放在DatagramPacket类当中,然后扔出去,没有真正的【虚拟通道】。
能够理解这一点,才算真正窥探了两者之间的区别。
由此可见TCP是安全的,UDP是不安全的。TCP是效率低的,UDP是效率高的。那么,不太重要的数据就用UDP发送,重要的数据就用TCP发送。
☆ UDP的演绎
发送接收模式
写一个客户端只有数据发送,写一个服务端只有数据接收。这个就是一个【单向通讯模式】简单聊天室模式
写一个客户端只有数据发送,写一个服务端只有数据接收,然后服务端加入循环,一直开着,监听端口。这就是一个【聊天室模式】。其他客户端都能向这个服务端发送数据。加入循环–> 群发
写一个客户端只有数据发送,然后加入循环,这样就可以发送给多个服务端。 这个可以叫做群发。
同样的,因为客户端和服务端,其实没有什么区别,你在服务端写个数据发送,放到循环当中,发送到多个客户端,这个就也是群发了。
4.加入多线程–>群聊
写个客户端,写个发送线程类,然后写个服务端,写个接收线程类。服务端端口一直开着,循环。这就是一个真正的【聊天室模式】
◇
◇
◇
◇