网络编程基础:
1、找到对方IP:127.0.0.1本地回环地址,测试网卡。
2、数据要发送到对方指定的应用程序。为了标识这些应用程序对这些网络应用程序都用数字进行标识,这些数字
就叫做端口(逻辑端口)0-65535其中0-1024为系统保留端口
3、定义通信规则:这个规则成为协议。国际通用协议TCP/IP
网络通讯要素:IP地址、端口号、传输协议
OSI 7层参考模型 TCP/IP 5层模型
应用层 应用层
表示层 传输层
会话层 网络层
传输层 数据链路层
网络层 物理层
数据链路层
物理层
IP地址:
1、网络中设备的标识
2、本地回环地址:127.0.0.1 主机名:localhost
InetAddress类:
此类没有构造函数,通过调用静态方法返回本类对象
UDP:面向无连接static InetAddress getLocalHost() //返回本地主机 String getHostAddress() //返回IP地址字符串 String getHostName() //获取此IP地址的主机名 public static InetAddress getByName(String host) //在给定主机名的情况下确定主机的 IP 地址
1、将数据及源和目的封装成数据包中,不需要建立连接
2、每个数据报的大小限制在64K内
3、因无连接,是不可靠协议
4、不需要建立连接,速度快
TCP:面向连接
1、建立连接,形成传输数据的通道
2、在连接中进行大数据量传输
3、通过三次握手完成连接,是可靠协议
4、必须建立连接,效率稍低
Socket:
1、Socket是为网络服务提供的一种机制
2、通信的两端都有Socket
3、网络通信其实就是Socket间通信
4、数据在两个Socket间通过IO传输
public void connect(SocketAddress endpoint) throwsIOException将此套接字连接到服务器
/*实例:通过UDP传输方式,将一段文字数据发送出去。定义UDP发送端
思路:
1、建立UDPSocket服务
2、提供数据,并将数据封装到数据包中
3、通过Socket服务的发送功能,将数据包发出去
4、关闭资源 */
class UdpSend
{
public static void main(String[] args) throws Exception
{
//public DatagramSocket(int port) throws SocketException 创建数据报套接字并将其绑定到本地主机上的指定端口。
//1、创建UDP服务,通过DatagramSocket对象
DatagramSocket dgs = new DatagramSocket(8900);
//2、确定数据,并封装成数据包
// DatagramPacket(byte[] buf,int length,InetAddress address,int port)
byte[] buf = "akdlasf".getBytes();
DatagramPacket dgp =
new DatagramPacket(buf,buf.length,InetAddress.getByName("localHost"),10000);
//3、通过Socket的发送功能,将数据包发送出去 send()
dgs.send(dgp);
dgs.close();
}
/*实例:定义一个应用程序,用于接收UDP协议传输的数据并进行处理
思路:
1、定义udpSocket服务,通常会监听一个端口,其实就是给这个接收网络应用程序
定义数字标识,方便明确哪些数据过来该应用程序可以处理
2、定义一个数据包,用于存储接收到的字节数据。
数据包对象中有很多功能可以提取字节数据中的不同数据信息
3、通过Sockt服务的receive()方法将接收到的数据存入到已定义好的数据包中
4、通过数据包对象特有的功能,将这些不同的数据取出,打印在控制台上
5、关闭资源*/
class UdpReceive
{
public static void main(String[] args) throws Exception
{
//、创建UDP Socket服务,建立端点
DatagramSocket dgs = new DatagramSocket(10000);
//2、定义数据包,用于存储数据
// DatagramPacket(byte[] buf,int length)
byte[] buf = new byte[1024];
DatagramPacket dgp = new DatagramPacket(buf,buf.length);
//3、通过receive()方法,将收到的数据存入到数据包中
dgs.receive(dgp);
//4、通过数据包的方法获取其中的数据
String ip = dgp.getAddress().getHostAddress();
String data = new String(dgp.getData(),0,dgp.getLength());
int port = dgp.getPort();
System.out.println(ip + data + port);
dgs.close();
}
}
/*通过使用多线程创建聊天小程序*/
Tcp:
1、Tcp分客户端和服务端
2、客户端对应的对象是Socket
服务端对应的对象是ServerSocket
客户端:
Tcp是面向连接的,因此在建立Socket服务时,就要有服务端存在,并连接成功
形成通路后,在该通道进行数据的传输。Socket对象在建立时,就可以去连接指定主机
/*实例:给服务端发送一个文本数据,并接受服务端的信息反馈
步骤:
1、建立Socket服务,指定要连接的目的主机和端口
2、获取Socket流中的输出流,将数据写到该流中,通过网络发送给fuwd
3、获取Socket流中的输入流,将服务端反馈的数据获取到,并打印
3、关闭客户端资源*/
public static void main(String[] args) throws Exception
{
//1、创建客户端的Socket服务,指定目的主机和端口
Socket s = new Socket("localhost",10009);
//2、为了发送数据,应该获取Socket流中的输出流
OutputStream os = s.getOutputStream();
os.write("服务端你好".getBytes());
InputStream is = s.getInputStream();
byte[] buf = new byte[1024];
int len = is.read(buf);
System.out.println(new String(buf,0,len));
s.close();
}
URL
String getFile() //获取此 URL 的文件名。
String getHost() //获取此 URL 的主机名(如果适用)。
String getPath() //获取此 URL 的路径部分。
int getPort() //获取此 URL 的端口号。
String getProtocol() //获取此 URL 的协议名称。
String getQuery() //获取此 URL 的查询部分。
URLConnection
URL url = new URL("http://127.0.0.1:8080/myweb/demo.html");
URLConnection urlConn = url.openConnection();
InputStream inStream = urlConn.getInputStream();
byte[] buf = new byte[1024];
int len =inStream.read(buf);
System.out.println(new String(buf,0,len));