JAVA网络编程整理
在这里面主要整理TCP和UDP编程两种
TCP协议
定义
TCP协议是一种可靠的网络协议,在通信的两端各建立一个Socket,然后在两个Socket之间建议一个虚拟的网络联接,双方通过这个联接来进行通信。
Server端
- 新创建一个ServerSocket对象
- 通过ServerSocket的accept()方法,返回一个与客户端联接的Socket
- 通过Socket的getInputStream(),getOutputStream(),然后对这两个字节流进行包装,然后再来进行与客户端的读写。
- 通信完成以后关闭读写流,关闭Socket
一般来ServerSocket不关闭,因为它需要时刻监听任何一个来自客户端的联接请求。
Client端
- 新创建一个Socket对象,此Socket对象需要指定服务端的IP及端口号,其中”127.0.0.1”指的是本机。
- 通过Socket的getInputStream(),getOutputStream(),然后对这两个字节流进行包装,然后再来进行与服务端的读写。
- 通信完成以后关闭读写流,关闭Socket。
从以上步骤可以看见其中Client端与Server的方法比较类似,区别在于Server端需要新创建一个ServerSocket对象,然后再通过ServerSocket对象的accept()方法来创建Socket对象.
UDP编程
定义
UDP协议是一种不可靠的协议,在通信双方各建立一个Socket,但这两个Socket之间并没有虚拟联接,两个Socket只管发送,接收数据包,至于对方有没有收到则不管,存在的问题是可能会丢数据包,导致数据的丢失。
Server端编程
- 新建一个byte[]对象,用来接收客户端传过来的数据。
- 新建DatagramPacket对象,将第1步新建的byte[]对象封装在里面。
- 新建一个DatagramSocket对象。
- 使用DatagramSocket的receive方法,参数为第2步中的DatagramPacket对象。此时数据已经传到byte[]中了。
- 此时已经完成了数据的接受动作,把byte中的数据取出即可。
Client端编程
- 新建一个byte[]对象,用来装需要传输的数据
- 新建DatagramPacket对象,将第1步新建的byte[]对象封装在里面,并且需要在包里面注明接收端的IP及端口号。
- 新建一个DatagramSocket对象。
- 使用DatagramSocket的send方法,参数为第2步中的DatagramPacket对象。此时数据已经发达出去了。
注意:如何Server端需要给Client回复信息,可以从接受到的DatagramSocket中拿到客户端的IP及端口信息(getSocketAddress()方法),然后采用和Client端编程类似的方法来发送即可。