一、网络基础知识
1、IP
网际协议,将一个消息从一个主机传递到另一个主机使用的协议称为IP协议,它是Internet的网络协议。
2、TCP
传输控制协议,TCP是一种可靠的面向连接的传输服务,TCP处理IP协议中没有处理的通信问题,向应用程序提供可靠的通信连接,能自动适应网络的变化,它保障了在网络中正确无误地传递数据包。
3、UDP
用户数据报包协议,与TCP一样是属于传输层的协议,它实现的是不可靠、无连接的数据报服务,这样可以节省建立连接与拆除连接的时间。
二、套接字
套接字(Sockets)是支持TCP/IP协议的网络通信的基本操作单元,可以将套接字看作不同主机之间的进程进行双向通信的端点。
套接字根据传输的数据类型的差异,可以分为:面向连接的套接字(Stream Sockets)和无连接的套接字(Datagram Sockets)。
三、TCP套接字编程(面向连接)
TCP套接字编程涉及的类主要有:InetAddress类、Sockets类、与ServerSockets类。
1、InetAddress类
InetAddress类用于表示Internet上的主机地址,InetAddress类的一个实例是由主机名和IP地址组成的。
例如:
public class DemoAddress {
public DemoAddress() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
InetAddress ia = InetAddress.getByName("king");
String straddress = ia.getHostAddress();
String strname = ia.getHostName();
System.out.println("主机IP地址:"+straddress+"\n"+"主机名称:"+strname);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2、Sockets类
Sockets类是Java网络应用程序的一个基本构造模块,它实现了程序之间的双向通信。
例如:
public class DemoClient {
public DemoClient() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
<span style="white-space:pre"> </span>//设定端口
Socket client = new Socket("king", 20015);
OutputStream os = client.getOutputStream();
byte[] bu = "abcd".getBytes();
os.write(bu, 0, bu.length);
client.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3、ServerSockets类
ServerSockets类用来侦听所有来自指定端口的连接,并且为每一个新的连接创建一个Socket对象,完成后就可以通信了。
例如:
public class DemoServer {
public DemoServer() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//指定端口
ServerSocket ss = new ServerSocket(20015);
Socket s = ss.accept();
InputStream is = s.getInputStream();
byte[] b = new byte[1024];
int length = is.read(b);
System.out.println("Server:"+"\n"+new String(b,0,length));
s.close();
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
四、UDP套接字编程(无连接)
UDP套接字涉及的类有DatagramPacket类与DatagramSocket类,前一个类包含了要发送的数据,后一个则执行发送与接收数据的任务。
1、DatagramPacket类
其代表了UDP中的数据报,被发送的数据报包含了目的地址与内容。其构造方法如下:
DatagramPacket(byte[] buf, int length) 构造 DatagramPacket ,用来接收长度为 length 的数据包。 |
DatagramPacket(byte[] buf, int length,InetAddress address, int port) 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。 |
DatagramPacket(byte[] buf, int offset, int length) 构造 DatagramPacket ,用来接收长度为 length 的包,在缓冲区中指定了偏移量。 |
DatagramPacket(byte[] buf, int offset, int length,InetAddress address, int port) 构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。 |
DatagramPacket(byte[] buf, int offset, int length,SocketAddress address) 构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。 |
DatagramPacket(byte[] buf, int length,SocketAddress address) 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。 |
参数含义解释:
*buff:数据缓冲区号。
*InetAddress:目的地址录。
*Offest :指定缓冲区的起始位置。
*Port:目的地的端口号。
*length : 缓冲区的长度。
2、DatagramSocket类
其负责报文的发送与接收,它创建UDP套接字,构造方法如下:
| DatagramSocket() 构造数据报套接字并将其绑定到本地主机上任何可用的端口。 |
protected | DatagramSocket(DatagramSocketImpl impl) 创建带有指定 DatagramSocketImpl 的未绑定数据报套接字。 |
| DatagramSocket(int port) 创建数据报套接字并将其绑定到本地主机上的指定端口。 |
| DatagramSocket(int port,InetAddress laddr) 创建数据报套接字,将其绑定到指定的本地地址。 |
| DatagramSocket(SocketAddress bindaddr) 创建数据报套接字,将其绑定到指定的本地套接字地址。 |
参数含义解释:
*laddr:该socket绑定的地址。
*port:该socket绑定的端口。