您的位置:首页 > 理论基础 > 计算机网络

# 史上最全讲解: JAVA中的网络编程

2020-01-15 11:42 1721 查看

史上最全讲解: JAVA中的网络编程

文章目录

网络编程简介

IP 端口 url
协议: 交流的方式
资源传输层协议: udp tcp
IP: 定义网络上的节点(手机,电脑,路由器…)
ipv4 32位 ipv6 64位
特殊的IP
组织内部IP,非注册IP:192.168.0.0~192.168.255.255

ip与域名之间的关系:
DNS 服务器
java提供了一个类: InetAddress
端口: 区分不同的软件 ,2个字节 0~65535
java提供的类:InetSocketAddress(String hostname, int port)
同一协议下端口不能冲突
预留端口号:
  80 :http
  8080 :tomcat
  1532 :oracle
  3306 :mysql
InetSocketAddress 端口
URL: 统一资源定位符
java中存在URL类:http://www.baidu.com:80/index.html

面向Socket编程,
tcp和udp不一样
udp: 非面向连接的 协议简单,开销小,效率高 不安全 一般不超过60k 基于字节数组tcp: 面向连接的 效率低 安全基于3次握手 1:发送请求 2.回应 3.发送数据 基于io流

  • DatagramSocket
  • DatagramPacket

UDP(User Datagram Protocol)

udp实现发送端:
1.使用 DatagramSocket(int port) 定义发送端
2.准备数据
3.数据打包 DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)
4.发送数据 void send(DatagramPacket p) 从此套接字发送数据报包。
5.资源关闭
udp实现接收端:
1.定义接收端new DatagramSocket(6666);
2.准备包裹,接收数据
3.接收
4.关闭

package com.shsxt.sendreceive03;

import java.io.FileInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

public class Send01 {
public static void main(String[] args) throws IOException {
//System.out.println("发射端");
//1.使用DatagramSocket定义发送端DatagramSocket(int port)既可以发也可以收
DatagramSocket send = new DatagramSocket(8888);
//2.准备数据
FileInputStream fis = new FileInputStream("D:\\A\\a.txt");
byte[] by = new byte[1024*60];
String str = null;
int len = -1;
while((len=fis.read(by))!=-1){
str=new String(by,0,len);
}
fis.close();//fis输入流关闭
//System.out.println(str);
//		fis.read();.
byte[] arr = str.getBytes();
//3.打包DatagramPacket(byte[],0,len)
//DatagramPacket(byte[] buf, int length, InetAddress address, int port)
DatagramPacket data = new DatagramPacket(arr,0,arr.length,new InetSocketAddress("192.168.8.125",9999));
//4.发送数据
send.send(data);
//5.关闭
send.close();

}
}
package com.shsxt.sendreceive03;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class receive02 {
public static void main(String[] args) throws IOException {
//System.out.println("接收端");
//1.定义接收端
DatagramSocket receive = new DatagramSocket(9999);
//2.准备包裹,接收数据
byte[] car = new byte[1024*60];
DatagramPacket packet = new DatagramPacket(car,car.length);
//3.接收
receive.receive(packet);
//处理数据
byte[] arr = packet.getData();
int len = packet.getLength();
System.out.println(new String(arr,0,len));
//4.关闭
receive.close();
}
}

TCP

tcp实现客户端:
1.定义客户端 Socket(InetAddress address, int port) ip和端口是要访问的服务器端的ip+端口
2.准备数据
3.基于io操作发送
4.关闭

tcp实现基本流程:服务器
1.定义服务器端 ServerSocket(int port)
2.阻塞式监听 Socket accept()
3.io操作
4.关闭

package com.shsxt.tcp;

import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class TCPClient03 {
public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("----------我是客户端---------");
//1.定义客户端
Socket client= new Socket("localhost",9999);
//2.准备数据
FileInputStream fis = new FileInputStream("D:\\A\\a.txt");
byte[] car = new byte[1024*60];
int len = fis.read(car);
String str = new String(car,0,len);
//3.基于io操作
DataOutputStream os=new DataOutputStream(client.getOutputStream());
os.writeUTF(str);
//4.关闭
fis.close();
os.flush();
os.close();
client.close();

}
}
package com.shsxt.tcp;

import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer04 {
public static void main(String[] args) throws IOException {
System.out.println("------服务端-------");
//1.定义服务器端
ServerSocket server=new ServerSocket(9999);
//2.阻塞式监听
Socket client=server.accept();
System.out.println("------一个客户端连接成功了---------");
//3.io
DataInputStream is=new DataInputStream(client.getInputStream());
String str=is.readUTF();
byte[] car = str.getBytes();

FileOutputStream fos = new FileOutputStream("D:\\A\\aa.txt");
//int len = is.read(car);不能重复读文件
System.out.println(car.length);
fos.write(car,0,car.length);
System.out.println(str);
//4.关闭
fos.close();
is.close();
server.close();
}
}
  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
hulincup 发布了21 篇原创文章 · 获赞 4 · 访问量 316 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: