计算机网络
127.0.0.1
IP :互联网协议地址 ipv4和ipv6 设备在网络中的唯一表示
DNS把域名解析为了IP
IPv4 4字节 点分十进制
IPv6 16字节 八组 冒分十六进制 去头0,0位压缩
端口号: 找到设备中软件的标识 两个字节表示的整数 0~65535
协议 :计算机网络中,连接和通信的规则被称为计算机网络通信
InetAddress 类使用
//通过主机名获取主机对象
InetAddress inetAddress= InetAddress.getByName("DESKTOP-4MKNLPK");
System.out.println("主机名为"+inetAddress.getHostName());
System.out.println("IP为"+inetAddress.getHostAddress());
1 允许部分数据丢失,使用UDP(用户数据报)协议 无连接
发送数据 (单播)
class Client {
public static void main(String[] args) throws IOException {
Scanner scanner =new Scanner(System.in);
//找码头 数据报 套接字
DatagramSocket datagramSocket=new DatagramSocket();
//数据报 封装
String string=scanner.next();
byte[] bytes=string.getBytes();
InetAddress inetAddress=InetAddress.getByName("127.0.0.1");
int port=10086;
DatagramPacket datagramPacket=new DatagramPacket(bytes,bytes.length,inetAddress,port);
//发送数据
datagramSocket.send(datagramPacket);
System.out.println("发送成功");
//释放资源
datagramSocket.close();
}
}
接收数据
public class Server {
public static void main(String[] args) throws IOException {
//找码头 数据报套接字
DatagramSocket datagramSocket=new DatagramSocket(10086);
//装数据报箱子
byte[] bytes=new byte[1204];
DatagramPacket datagramPacket=new DatagramPacket(bytes,bytes.length);
//接受数据
System.out.println("接受数据");
datagramSocket.receive(datagramPacket);
System.out.println("接收成功");
//获取箱子中的数据
String string=new String(datagramPacket.getData());
System.out.println(string);
//释放资源
datagramSocket.close();
}
}
UDP(组播)
MulticastSocket ms=new MulticastSocket(port)//接收端
//把当前计算机绑定一个人组播地址
//组播地址 224.0.0.1~239.255.255.255 组播的预留地址为 224.0.0.1~224.0.0.255
发送数据
class Client {
public static void main(String[] args) throws IOException {
//套接字
Scanner scanner =new Scanner(System.in);
DatagramSocket datagramSocket=new DatagramSocket();
//装 数据报的箱子
String string=scanner.next();
byte[] bytes=string.getBytes();
InetAddress inetAddress=InetAddress.getByName("224.0.0.15");
int port=14752;
DatagramPacket datagramPacket=new DatagramPacket(bytes,bytes.length,inetAddress,port);
//发送数据
datagramSocket.send(datagramPacket);
System.out.println("发送成功");
//释放资源
datagramSocket.close();
}
}
接收数据
public class Server {
public static void main(String[] args) throws IOException {
//创建 广播套接字对象
MulticastSocket multicastSocket=new MulticastSocket(14752);
//创建数据报报对象
byte[] arr=new byte[1024];
DatagramPacket datagramPacket=new DatagramPacket(arr,arr.length);
//加入组播组
multicastSocket.joinGroup(InetAddress.getByName("224.0.0.15"));
multicastSocket.receive(datagramPacket);
String s=new String(datagramPacket.getData());
System.out.println(s);
//释放资源
multicastSocket.close();
}
}
UDP (广播)
广播 InetAddressdd255.255.255.255
2 不允许任何数据丢失,是同TCP(传输控制协议)协议 面向连接
发送端
/*
//套接字 两台机器间通信的端点
Scoket sk=new Socket(host,port);
//获取IO流开始写写数据
OutputStream os=socket.getOutputStream();
//将字节输出流转换为字符输出流
OutputStreamWriter osw=new OutputStreamWriter(os);
BufferedWriter bw=new BufferedWriter(osw);
*/
public class SocketClient {
public static void main(String[] args) throws IOException {
//创建套接字对象
Socket socket=new Socket("192.168.11.61",10000);
//创建字节输出流对象
OutputStream outputStream=socket.getOutputStream();
//字节输出流转换为字符输出流
OutputStreamWriter outputStreamWriter=new OutputStreamWriter(outputStream);
BufferedWriter bufferedWriter=new BufferedWriter(outputStreamWriter);
bufferedWriter.write("带骨头的狗");
bufferedWriter.newLine();
bufferedWriter.close();
//释放资源
socket.close();
}
}
接收数据
//客户端连接服务器三次握手
//在最后一步断开链接,通过四次挥手协议保证连接终止
public class Server {
public static void main(String[] args) throws IOException {
//创建服务器端的套接字对象
ServerSocket socket=new ServerSocket(10000);
//监听客户端连接 阻塞方法
Socket accept=socket.accept();
//创建字节输入流对象,接受
InputStream inputStream=accept.getInputStream();
//字节输入流转换成字符输入流
InputStreamReader inputStreamReader=new InputStreamReader(inputStream);
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
//readLine阻塞方法,传输的数据报中没有结束符标记
System.out.println(bufferedReader.readLine());
//在关IO流的时候,多了一个往服务器理写结束标记的动作
bufferedReader.close();
socket.close();
}
}
三次握手 粗浅理解,不是计算机网络

四次挥手 粗浅理解

数据交互小练习
客户端
public class Client01 {
public static void main(String[] args) throws IOException {
//创建套接字对象
Socket socket=new Socket("127.0.0.1",10086);
//创建字节输出流输出到套接字对象中
OutputStream outputStream=socket.getOutputStream();
//将字节输出流转换为字符输出流
OutputStreamWriter outputStreamWriter=new OutputStreamWriter(outputStream);
BufferedWriter bufferedWriter=new BufferedWriter(outputStreamWriter);
bufferedWriter.write("大白鹅");
bufferedWriter.newLine();
bufferedWriter.flush();
socket.shutdownOutput();
//接受服务器的回复
InputStream inputStream=socket.getInputStream();
//字节输入流转换为字符数入流
InputStreamReader inputStreamReader=new InputStreamReader(inputStream);
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
System.out.println(bufferedReader.readLine());
bufferedWriter.close();
bufferedReader.close();
socket.close();
}
}
服务器端
public class Server {
public static void main(String[] args) throws IOException {
//创建服务器端 套接字对象
ServerSocket serverSocket=new ServerSocket(10086);
// 创建连接 阻塞任务
Socket accept=serverSocket.accept();
//创建字节输入流
InputStream inputStream=accept.getInputStream();
//字节输入流转换为字符数入流
InputStreamReader inputStreamReader=new InputStreamReader(inputStream);
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
System.out.println(bufferedReader.readLine());
//回复客户端
OutputStream outputStream=accept.getOutputStream();
//将字节输出流转换为字符输出流
OutputStreamWriter outputStreamWriter=new OutputStreamWriter(outputStream);
BufferedWriter bufferedWriter=new BufferedWriter(outputStreamWriter);
bufferedWriter.write("难道你就是传说中的大白鹅");
bufferedWriter.close();
bufferedReader.close();
accept.close();
}
}
文件里的数据交互小练习
优化 服务端
文件名随机且唯一(有很小小小的几率重复) UUID
reandomUUID()
toString().replace()
改为多线程
加线程池
类 InetAddress
ipconfig 查看本机IP地址
私有构造 成员方法
public class MyInetAddress {
public static void main(String[] args) throws UnknownHostException {
//通过ip获取主机对象
InetAddress inetAddress= InetAddress.getByName("192.168.56.1");
System.out.println("主机名为"+inetAddress.getHostName());
System.out.println("IP为"+inetAddress.getHostAddress());
/*byte[] arr="192.168.56.1".getBytes();
InetAddress inetAddress=InetAddress.getByAddress(arr);
System.out.println(inetAddress.getHostName());*/
}
}

浙公网安备 33010602011771号