------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
UDP协议和TCP协议
UDP协议:面向无连接,数据封包,体积小,64K/个,不可靠,速度快。例子:聊天软件,视频会议,桌面共享。
TCP协议:TCP协议:必须面向连接(确认对方在不在),在连接中进行大数据量传输,通过三次握手完成连接,是可靠协议,必须建立连接,效率会 降低。
IP可以叫IP协议,也可以叫IP地址,在这里我们主要讲关于如何获得IP地址。IP 地址是 IP 使用的 32 位或 128 位无符号数字,它是一种低级协议,UDP 和 TCP 协议都是在它的基础上构建的。InetAddress是java中表示互联网协议地址的类,InetAddress 的实例包含 IP 地址,还可能包含相应的主机名。以下是代码实例:
//返回本地主机的IP地址
InetAddress i = InetAddress.getLocalHost();
System.out.println(i.toString());
//返回字符串格式的原始IP地址
System.out.println("address:"+i.getHostAddress());
//获取此 IP 地址的主机名
System.out.println("name:"+i.getHostName());
//在给定主机名的情况下确定主机的 IP 地址。
//主机名可以是机器名(如 "www.baidu.com"),也可以是其 IP 地址的文本表示形式。
InetAddress ia = InetAddress.getByName("www.baidu.com");
System.out.println("address:"+ia.getHostAddress());
System.out.println("name:"+ia.getHostName());
端口
客户端想要与服务器沟通除了要使用共同点协议,还要一个指定一个专用的开口,这个开口就成为端口。并被规定是一个在0~65535之间的整数。套接字
套接字(Socket)是用来接收或传送分组的一个端点。套接字是客户端和服务端与端口连接的桥梁。利用socket进行通信的程序叫socket通信。TCP编程
TCP编程过程中服务器端与客户端交互过程如下:(1)服务器程序创建一个ServerSocket(服务器套接字),调用accept()方法等待客户机来连接。
(2)客户端程序创建一个Socket,请求与服务器建立连接。
(3)服务器接收客户机的连接请求,同时创建一个新的Socket与客户端连接。服务器继续等待新的请求。
TCP编程的常用类有InetAddress类、ServerSocket类和Socket类。在Socket类中getInputStream()和getOutputStream()方法经常用于实际通信中。以下是TCP编程实现客户端和服务器端数据的交流代码示例:
//客户端程序
//创建客户端的socket服务。指定目的主机和端口
Socket s = new Socket("192.168.1.101", 10003);
//为了发送数据,应该获取socket流中的输出流
OutputStream out = s.getOutputStream();
//写入数据
out.write("wowowow lai l".getBytes());
//关闭客户端
s.close();
//服务端程序
//建立服务端socket服务。并监听一个端口。
ServerSocket ss = new ServerSocket(10003);
//通过accept方法获取连接过来的客服端对象。
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"...is connected.");
//获取客服端发送过来的数据,那么要使用的客服端对象的读取流来读取数据
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
System.out.println(new String(buf, 0, len));
//关闭客户端,服务端
s.close();
ss.close();
TCP编程中还可以通过URL类来访问网站中的资源。通过创建URL对象,并与该对象进行远程连接,再获得相应的输入输出流,最后获得网站中的 资源。如下所示:
//创建一个URL对象,访问的是本地Tomcat服务器中的web网页demo
URL url = new URL("http://192.168.1.101:8080/myweb/demo.html");
//建立与URL对象的远程连接
URLConnection conn = url.openConnection();
//System.out.println(conn);
//返回从此打开的连接读取的输入流
InputStream in = conn.getInputStream();
byte[] buf = new byte[1024];
int len = 0;
while((in.read(buf))!=-1){
System.out.println(new String(buf,0,len));
}
UDP编程
UDP协议提供数据包的形式,将数据打包称为数据包,然后发送到目的地;接收别人发来的数据包,然后查看数据包。下面是UDP程序的步骤。发送数据包执行顺序:
(1)使用DatagramSocket()创建一个数据包套接字。
(2)使用DatagramPacket(byte[] buf, int offset, int length, InetAddress address,int port)创建要发送的数据包。
(3)使用DatagramSocket类的send()方法,发送数据包。
接收数据包执行顺序:
(1)使用DatagramSocket(int port)创建数据包套接字,绑定到指定的端口。
(2)使用DatagramPacket(byte[] buf, int length)创建字节数组,接收数据包。
(3)使用DatagramPacket类的receive()方法,接收UDP包。UDP编程的常用类有程序套接字DatagramSocket类和数据包类DatagramPacket类。DatagramPacket负责UDP的数据传送。以下是UDP编程实现的实例代码:
//数据包接收端
//1.创建udp,socket,建立端点
DatagramSocket ds = new DatagramSocket(10000);
//2.定义数据包。用于存储数据。
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
//3.通过服务的receive方法将接收到的数据存入数据包中。阻塞式方法,没数据就一直等
ds.receive(dp);
//4.通过数据包的方法获取其中的数据。IP、数据、端口号
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(),0,dp.getLength());
int port = dp.getPort();
System.out.println(ip+"::"+data+"::"+port);
//5.关闭资源
ds.close();
// 数据包发送端
//1.创建udp服务,通过DatagramSocket对象。(可以给发送方设置一个端口号)
DatagramSocket ds = new DatagramSocket(8888);
//2.确定数据,并封装成数据包。DatagramPacket(Byte[] byte,int length,InetAddress address,int port);
byte[] buf = "天生我材必有用".getBytes();
DatagramPacket dp =
new DatagramPacket(buf,buf.length, InetAddress.getByName("192.168.1.101"), 10000);
//3.通过socket服务,将已有的数据包发送出去。通过send方法
ds.send(dp);
//4.关闭资源
ds.close();
总结
以上就是网络编程的基本概念,了解这些技术可以方便我们在下一步的JavaWeb编程中的学习,并且帮助我们了解了网络中聊天器、上传文件等流程的工作原理。