黑马程序员 JAVA基础之网络编程笔记

来源:互联网 发布:淘宝商城女装新款上衣 编辑:程序博客网 时间:2024/05/22 12:06
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
网络通讯要素:
IP地址:即网络中设备的标识,如:192.168.0.1
端口号:用于标识进程的逻辑地址,不同进程的标识。
传输协议:通信的规则,常见的通信协议有:TCP,UDP.

UDP:
将数据及源和目的的封装成数据包中,不要建立连接。
每个数据报的大小限制在64k内。
无需连接,所以是不可靠协议。
不需要建立连接,所以速度快。
TCP:
建立连接,成成传输数据的通道。
在连接中进行大数据量传输。
通过三次握手完成连接,是一种可靠的协议。
必须建立连接,效率会稍低。

Socket:
Socket是为网络服务提供的一种机制。
通信的两端都有Socket。
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO传输。

UDP:
只要是网络通信就必须要有Socket。
将传输的数据,目的地址,端口都必须封装在数据包中。
java中对UDP进行了封装,就是DatagramSocket这个类。应用这个类可以实现UDP的发送和接收。

udp的发送端:
1,建立udp的socket服务,创建对象时如果没有明确端口,系统会自动分配一个未被使用的端口。
2,明确要发送的具体数据。
3,将数据封装成了数据包。
4,用socket服务的send方法将数据包发送出去。
5,关闭资源。
//1,udpsocket服务。使用DatagramSocket对象。
DatagramSocket ds = new DatagramSocket(8888);
//2,将要发送的数据封装到数据包中。
String str = "udp发送端";
//使用DatagramPacket将数据封装到的该对象包中。
byte[] buf = str.getBytes();
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.103"),10000);
//3,通过udp的socket服务将数据包发送出去。使用send方法。
ds.send(dp);
//4,关闭资源。
ds.close();

建立UDP接收端的思路。
1,建立udp socket服务,因为是要接收数据,必须要明确一个端口号。
2,创建数据包,用于存储接收到的数据。方便用数据包对象的方法解析这些数据.
3,使用socket服务的receive方法将接收的数据存储到数据包中。
4,通过数据包的方法解析数据包中的数据。
5,关闭资源 
//1,建立udp socket服务。
DatagramSocket ds = new DatagramSocket(10000)
//2,创建数据包。
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
//3,使用接收方法将数据存储到数据包中。
ds.receive(dp);//阻塞式的。
//4,通过数据包对象的方法,解析其中的数据,比如,地址,端口,数据内容。
String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();
String text = new String(dp.getData(),0,dp.getLength());
System.out.println(ip+":"+port+":"+text);
//5,关闭资源。
ds.close();

TCP:
TCP分客户端和服务端,在通信时需要先建立连接,然后再进行数据的传输。
客户端
1,创建tcp客户端socket服务。使用的是Socket对象。
建议该对象一创建就明确目的地。要连接的主机。 
2,如果连接建立成功,说明数据传输通道已建立。
该通道就是socket流 ,是底层建立好的。 既然是流,说明这里既有输入,又有输出。
想要输入或者输出流对象,可以找Socket来获取。 
可以通过getOutputStream(),和getInputStream()来获取两个字节流。
3,使用输出流,将数据写出。 
4,关闭资源。 
演示代码:
//创建客户端socket服务。
Socket socket = new Socket("192.168.1.100",10001);
//获取socket流中的输出流。 
OutputStream out = socket.getOutputStream();
//使用输出流将指定的数据写出去。
out.write("tcp客户端".getBytes());
//关闭资源。
socket.close();

服务端:
1,创建服务端socket服务。通过ServerSocket对象。
2,服务端必须对外提供一个端口,否则客户端无法连接。
3,获取连接过来的客户端对象。
4,通过客户端对象获取socket流读取客户端发来的数据 
并打印在控制台上。
5,关闭资源。关客户端,关服务端。 
演示代码:
//1创建服务端对象。
ServerSocket ss = new ServerSocket(10001);
//2,获取连接过来的客户端对象。
Socket s = ss.accept();//阻塞式.
String ip = s.getInetAddress().getHostAddress();
//3,通过socket对象获取输入流,要读取客户端发来的数据
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
String text = new String(buf,0,len);
System.out.println(ip+":"+text);
s.close();
ss.close();

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com
0 0
原创粉丝点击