1.网络编程
1.1网络编程三要素
IP地址: 要想让网络中的计算机 能够相互通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接收数据的计算机和识别发送的计算机,而IP地址就是这个标识号。也就是设备的标识
端口: 网络通信,本质上是两个应用程序的通信。每台计算机都有很多应用程序,那么在网络通信时,如何区分这些应用程序呢?如果说IP地址可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的应用程序了。也就是应用程序的标识
协议: 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则应用。在计算机网络中,这些连接和通信的规则被称为网络通信协议,他对数据的传输格式,传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据的交换,常见的协议有UDP协议和TCP协议
IP地址
常用命令:
- ipconfig:查看本机IP地址
- ping IP地址:检查网络是否畅通
- 127.0.0.1是回送地址,也可作为本机地址,一般用来测试
InetAdress使用
为了方便对地址操作,java提供了一个InetAdress类供我们使用 这个类代表一个互联网协议(IP)地址。 InetAddress类提供的方法来将主机名解析为IP地址
该类无构造方法,方法也大都不是静态,但是有一个返回该类对象的静态方法 static InetAddress[] getAllByName(String host) 给定一个主机的名称,返回其IP地址的数组,基于系统上的配置的名称服务。 注意名称可以是机器名称,也可以是IP地址 String getHostAddress() 返回文本表示中的IP地址字符串。 String getHostName() 获取此IP地址的主机名。 代码示例:
package INTERNET;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class InetAddressDemo {
public static void main(String[] args) {
try {
InetAddress address=InetAddress.getByName("LAPTOP-4IJARJ6A");
String name=address.getHostName();
System.out.println("name:"+name+"\n"+"ip:"+address.getHostAddress());
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
端口
设备应用程序的唯一标识
端口号:用两个字节表示的整数,它的取值范围是0~65535, 0~1023之间的端口号用于一些知名的网络服务和应用,普通的应用程序需要使用1024以上的端口号。如果端口号被别的应用或服务占用,会导致当前程序启动失败
协议
计算机网络中,连接和通信的规则被称为网络通信协议
UDP通信程序
UDP通信原理
UDP发送数据
发送数据的步骤:
- 创建发送端的Socket对象(DatagramSocket)
- 创建数据,并把数据打包
- 调用DatagramSocket对象发送数据
- 关闭发送端
DatagramPacket 这类表示一个数据报包。 DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port) 发送有偏置 ioffsetto指定端口号指定主机上的数据包长度 length数据报包结构。 SendDemo
package INTERNET;
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 SendDemo {
public static void main(String[] args) throws IOException {
DatagramSocket ds=new DatagramSocket();
byte []buf="Hello,Socket!!".getBytes();
InetAddress address=InetAddress.getByName("192.168.235.1");
System.out.println("发送消息:"+new String(buf));
DatagramPacket dp=new DatagramPacket(buf,0,buf.length,address,10086);
ds.send(dp);
ds.close();
}
}
UDP接收数据
接收数据的步骤:
- 创建接收端的Socket对象(DatagramSocket)
- 创建一个数据包,用于接收数据
- 调用DatagramSocket对象的方法接收数据
- 解析数据包,并把数据在控制台显示
- 关闭接收端
ReceiveDemo
package INTERNET;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
DatagramSocket ds=new DatagramSocket(10086);
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
ds.receive(dp);
byte[] datas=dp.getData();
System.out.println("数据是:"+new String(datas,0,dp.getLength()));
ds.close();
}
}
TCP通信程序
TCP通信原理
TCP发送数据
发送数据的步骤:
- 创建客户端的Socket对象
- 获取输出流,写数据
- 释放资源
ClientDemo:
package INTERNET;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientDemo {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket client=new Socket("192.168.235.1",25538);
OutputStream w=client.getOutputStream();
w.write("hello,I am coming".getBytes());
client.close();
}
}
TCP接收数据
接收数据的步骤:
- 创建服务器端Socket对象(ServerSocket)
- 获取输入流,读数据,并把数据显示在控制台
- 释放资源
ServerDemo:
package INTERNET;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
public static void main(String[] args) throws IOException {
ServerSocket server=new ServerSocket(25538);
Socket s=server.accept();
InputStream is=s.getInputStream();
System.out.print("接收到:");
int b;
while((b=is.read())!=-1) {
System.out.print((char)b);
}
server.close();
}
}
|