白话Java网络编程

◇ 网络协议

◇ 端口

◇ 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的演绎

  1. 发送接收模式
    写一个客户端只有数据发送,写一个服务端只有数据接收。这个就是一个【单向通讯模式】

  2. 简单聊天室模式
    写一个客户端只有数据发送,写一个服务端只有数据接收,然后服务端加入循环,一直开着,监听端口。这就是一个【聊天室模式】。其他客户端都能向这个服务端发送数据。

  3. 加入循环–> 群发
    写一个客户端只有数据发送,然后加入循环,这样就可以发送给多个服务端。 这个可以叫做群发。
    同样的,因为客户端和服务端,其实没有什么区别,你在服务端写个数据发送,放到循环当中,发送到多个客户端,这个就也是群发了。

4.加入多线程–>群聊
写个客户端,写个发送线程类,然后写个服务端,写个接收线程类。服务端端口一直开着,循环。这就是一个真正的【聊天室模式】



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值