关于网络编程
说起网络编程,通俗的说就是Socket编程。
使用对象InetAddress,因为该对象无构造函数,故不用new对象即可使用。
获取一个已知主机名的IP地址和主机名?
实例:
InetAddress inetaddress = Inetaddress.getByName("www.taobao.com");
System.out.println("IP地址:"+inetaddress.getHostAddress());
System.out.println("主机名:"+inetaddress.getHostName());
获取本地主机的IP地址和主机名?
InetAddress inetaddress = InetAddress.getLocalhost();
System.out.println("IP地址:"+inetaddress.getHostAddress());
System.out.println("主机名:"+inetaddress.getHostName());
网络编程分为2种传输方式:UDP传输和TCP传输。
UDP传输和TCP传输的区别:
1.udp传输是面向无连接的,俩端无需建立连接就可以传输数据,是不可靠协议;将数据打包发送并且每次发送的数据包不超过64k,速度快。
2.tcp传输是面向连接的,俩端必须经过3次握手连接后才可以传输数据,是可靠协议;可进行大数据量的传输效率稍低。
【UDP传输实例】:
模拟UDP传输方式的数据发送端?
class UDPSend{
public void udpSend() throws Exception{
//第一步:创建一个UDP服务==Socket服务。通过DatagramSocket对象。
DatagramSocket ds = new DatagramSocket();
//第二步:确定数据,并封装成数据包;
//封装数据包通过DatagramPacket对象的构造函数DatagramPacket(byte[] buf, int length, InetAddress address, int port)。
byte[] date = "UDP数据发送端".getBytes(); //将一段字符串转化为字节数组
DatagramPacket dp = new DatagramPacket(date,date.length,InetAddress.getByName("192.168.0.1"),4200);
//第三步:通过创建的Socket服务,将封装好的数据包发送出去。通过send()方法。
ds.send(dp);
//第四步:关闭UDP服务。
ds.close();
System.out.println("数据发送成功。");
}
}
模拟UDP传输方式的数据接受端?
class UDPReceive{
public void udpReceive()throws Exception{
//第一步:创建一个UDP服务==Socket服务。通过DatagramSocket对象。
//但是在建立服务的同时必须要指定接受的是那个端口程序发来的数据信息。
DatagramSocket ds = new DatagramSocket(4200); //[注意:这里指定的端口号必须和发送端的端口号一致,才可以接收到数据]
//第二步:定义一个字节数组,用于存储数据包。
byte[] date = new byte[1024];
DatagramPacket dp = new DatagramPacket(date,date.length);
//第三步:通过Socket服务的receive()方法将接受到的数据包存放到定义的字节数组中。
ds.receive(dp);
//第四步:通过数据包的方法获取其中的数据信息。
String IP = dp.getAddress().getHostAddress(); //通过DatagramPacket对象提取IP地址
String str = new String(dp.getData(),0,dp.getLength()); //通过DatagramPacket对象提取被发送的数据内容
int post = dp.getPort(); //通过DatagramPacket对象提取端口号
System.out.println(IP+"___"+str+"___"+post);
//第五步:关闭资源
ds.close();
}
}
【TCP传输实例】:在进行TCP传输数据时,先要必须打开服务端,因为该传输方式是面向连接的,否则数据无法传输。
模拟TCP传输方式的客户端发送数据给服务端?
class TCPClient{
public void client()throws Exception{
//第一步:创建客户端的Socket服务,并指定目的主机地址和端口。
Socket socket = new Socket("192.168.0.1",10000);
//2第二步:为了发送数据,先获取Socket服务中的输出流对象,然后将字节数据发送出去
OutputStream out = socket.getOutputStream();
out.write("TCP传输方式.".getBytes());
//第三步:关闭服务
socket.close();
}
}
模拟服务端接受客户端发送过类的数据?
class TCPSevrer{
public void server() throws Exception{
//第一步:创建服务端的ServerSocket服务,并监听一个来自客户端程序的端口
ServerSocket serversocket = new ServerSocket(10000);
//第二步:通过服务端对象的accept方法,获取一个连接过来的客户端对象
Socket socket = serversocket.accept();
//第三步:获取客户端发送过来的数据,那么要使用客户端对象的读取流对象
InputStream in = socket.getInputStream();
byte[] buf = new byte[1024]; //创建一个字节数组,用于存储发送过来的数据
int len = in.read(buf); //利用读取流读取数据
System.out.println(new String(buf,0,len));
System.out.println(socket.getInetAddress().getHostAddress()); //打印对应的客户端IP
//第四步:关闭服务
socket.close(); //关闭客户端服务
serversocket.close(); //关闭服务端服务【这个一般是不关闭的,可选】
}
}