说到网络编程,我们可以简单的将其理解为数据的传输,只不过这个数据的传输不是本机内的数据传输,而是与互联网中的某台机器进行数据的传输。数据的传输是通过流来完成的,而且,为了使数据能够顺利的完成传输过程,所以数据在传输时也要遵守相关的协议。
IP:
就和我们去邮局寄快递一样,我们要写上快递要去的地址。ip(如10.12.82.66) 就如同这地址一般,可以让你发送的数据正确的送往对应ip的主机上,所以当我们要访问互联网上某台主机的时候,可以通过ip找到主机并获取想要的内容。我们可以直接在浏览器上输入119.75.218.70,就可以访问到百度。但是往往我们很难记住这么复杂的ip地址,于是就给ip取了一个“名字”,域名是一个IP地址上的“面具” ,当我们输入www.baidu.com时,浏览器首先会查下了一下本机的hosts文件有没有对应用的地址,没有则去DNS服务器找到对应的ip地址,最后才会根据这个地址访问相关的内容。
java将ip地址也封装成了一个对象,InetAddress。下面了解一下InetAddress的基本用法。
import java.net.InetAddress;
import java.net.UnknownHostException;
public class InetAddressTest {
public static void main(String[] args) {
inetAddressTest();
}
private static void inetAddressTest() {
try {
// 获取本地主机的的InetAddress对象
// InetAddress inet = InetAddress.getLocalHost();
// 获取互联网中主机的InetAddress对象
InetAddress inet = InetAddress.getByName("www.baidu.com");
// InetAddress inet = InetAddress.getByName("119.75.217.109");
// 输出ip信息。
System.out.println(inet);
System.out.println(inet.getHostName());
System.out.println(inet.getHostAddress());
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
UDP:面向无连接,每次数据包的大小限制在64K之内,是不可靠的连接,但是速度快。
比如:聊天,视频会议,桌面共享等。
UDP不管对方在不在,直接将数据传送过去。
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class UDPTest {
/**
* @param args
* 将数据通过UDP的方式发送出去。
*/
public static void main(String[] args) {
DatagramSocket ds = null;
try {
// 创建socket,udp服务
ds = new DatagramSocket();
// 将要传输的数据封闭成数据包
byte[] buf = "hello java socket".getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length,
InetAddress.getByName("10.12.82.66"), 10000);
// 发送数据。
ds.send(dp);
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ds != null)
ds.close();
}
}
}
TCP:面向连接,形成传输数据的通道,可进行大数据传输。三次握手完成连接,是可靠协议,效率会稍低。
TCP是面向连接的,下面是一个简单的TCP服务端,运行后,通过浏览器访问:http://localhost:10000/就可以接收其发送过来的数据。
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Test1 {
public static void main(String[] args) {
try {
//创建服务端,端口号为10000
ServerSocket ss = new ServerSocket(10000);
//获取连接的客户对象。
Socket s = ss.accept();
//向客户端写入数据
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
String ip = s.getInetAddress().getHostAddress();
out.println("您好:"+ip);
s.close();
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}