InetAddress
网络编程中的基础工具类,提供了一些方法获取主机相关信息。
无需new对象,可直接调用InetAddress A = InerAddress.getLocalHost();
TCP网络编程
Socket
又称套接字,通信的两端都要有Socket,是两台机器通信的端点,相当于两个插口。在两台机器通信前要在两个Socket间建立一个IO流。网络通信实际就是Socket间的通信。其中主动发起通信的成为客户端,等待请求通信的称为服务端。客户端需要Socket.getOutputStream来建立输出流,服务端要通过Socket.getInputStream来建立输入流,如果服务端要返回数据同样需要建立IO流。
服务端
1)监听本机某端口(这里以9999示例)前天是该端口本机没有别的服务监听,端口选择尽量避免0-1024
ServerSocket serversocket = new ServerSocket(9999);
2)当没有客户端链接是程序会阻塞在端口监听。如果有客户端链接就会返回一个Socket对象。
Socket socket = serversocket.accept();
3)获取一个输入流用以接受客户端发送的数据。
InputStream inputstream = socket.getInputStream();
4)根据输入流相关方法读取数据。
5)关闭相关流和scoket。
客户端
1)根据IP地址和端口链接服务端
Socket socket = new Socket(InterAddress.getLocalHost,9999);
2)建立和该socket对象关联的输出流对象。
OutputStream outputstream = socket.getOutputStream();
3)通过流写数据。
outputstream.write();
4)发送完数据要写一个结束标记,表示此次传输结束。
socket.shoutdownOutput;
4)一定要关闭流和socket,避免资源占用。
outputstream.close();
socket.close();
另若使用字符流进行传输数据,可使用转换流把字节流转换成字符流。结束标志可以写成write.newLine。并且字符流在写完数据时一定要手动刷新(flush),否则无法写入。同时在对应的接收方一定要使用readLine方法,否则无法读取结束标志。
netstat指令
在dos控制台下执行,netstat -an可以查看当前主机网络情况,包括端口监听情况和网络连接情况
netstat -an|more可以分页显示(数据太多一页显示不下时)空格换页。
外部地址就是连接了本机的服务器地址和端口号。
ctrl+c退出指令。
UDP网络编程
UDP是不靠谱网络通信,主要通过DatagramSocket和DatagramPacket进行数据传输
UDP数据报通过数据报套接字 DatagramSocket发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。
DatagramPacket 对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。
UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接。
由于UDP没有明确的发送方和接收方,所以大致传输流程如下:
1.核心的两个类/对象 DatagramSocket与DatagramPacket
2.建立发送端,接收端(没有服务端和客户端概念),即new DatagramSocket对象,发送端和接收端均需指明监听的端口号。
3.发送数据前,建立数据包/报 DatagramPacket对象,发送端数据报初始化时要给出明确的IP及端口号,接收端数据报初始化时只需传入字节数组即可。每个数据包最大64k。
4.调用DatagramSocket的发送、接收方法
5.关闭DatagramSocket