网络编程基础
2021/6/19 22:27:49
本文主要是介绍网络编程基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
网络编程两大问题(写一封信给某个人)
-
如何定位网络上的一台或多台主机,定位主机上的应用(写给人的地址)
-
如何进行可靠高效进行数据传输(需要贴什么邮票)
解决问题一:IP和端口号
解决问题二:提供网络通信协议:TCP/IP参考模型
IP和端口
IP地址
1.唯一标识Internet上的计算机(通信实体)
2.在Java中使用InetAddress类代表IP
3.分类方式1:IPV4和IPV6
分类方式2:万维网 和 局域网
4.域名:代替IP,方便记忆 例如:www.baidu.com
5.本地回路地址:120.0.0.1 对应:localhost
6.如何实例化:两种 getByName(String host) getLocalHost()
两个常用方法:getHostName() 获取域名
getHostAddress() 获取地址IP
import java.net.InetAddress; import java.net.UnknownHostException; public class Main { public static void main(String[] args) { try { InetAddress byName = InetAddress.getByName("www.baidu.com"); System.out.println(byName.toString()); InetAddress localHost = InetAddress.getLocalHost(); System.out.println(localHost); System.out.println(byName.getHostName()); System.out.println(byName.getHostAddress()); } catch (UnknownHostException e) { e.printStackTrace(); } } }
端口号
1.标识正在计算机上运行的进程(程序)
2.不同进程要有不同的端口号
3.范围: 16位的整数 0-65535
端口号和IP地址的组合得出一个网络套接字:Socket
协议
TCP协议
三次握手(建立,确保两个人都在 客户端向服务器发消息问在不在,服务器回消息在,客户端回复)
四次挥手(释放,两个人都先对方发了消息说要断开,各自再回一条信息,客户端先,服务器发的时候,客户端回消息只是印证服务器也没有关闭)
可靠,
需要释放连接,效率低
UDP协议
将数据,源,目的封装在数据包
不可靠
速度快,无需释放资源,开销小
TCP
//客户端 @Test public void client() { Socket socket = null; OutputStream outputStream = null; try { // 设置IP和端口 InetAddress inetAddress = InetAddress.getByName(InetAddress.getLocalHost().getHostAddress()); socket = new Socket(inetAddress, 8899); // 获得一个输出流,用于输出数据 outputStream = socket.getOutputStream(); // 输出数据,可以是一句话也可以是文档图片(涉及IO流) outputStream.write("您好,我是客户端mm".getBytes()); // socket.shutdownOutput(); // 当然也可以从服务器收到消息,那么上面就要加以句 } catch (IOException e) { e.printStackTrace(); } finally { if (outputStream != null) { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (socket != null) { try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } // 服务器 @Test public void server() { ServerSocket serverSocket = null; Socket socket = null; InputStream inputStream = null; ByteArrayOutputStream byteArrayOutputStream = null; try { // 1.创建服务器端的SeverSocket,指明自己的端口号 serverSocket = new ServerSocket(8899); // 2.用accept(),表示接收来自客户端的socket socket = serverSocket.accept(); // 3.获取输出流 inputStream = socket.getInputStream(); // 4.读取输入流的数据 byteArrayOutputStream = new ByteArrayOutputStream(); int len; byte[] buffer = new byte[1024]; while ((len = inputStream.read(buffer)) != -1) { byteArrayOutputStream.write(buffer,0,len); } System.out.println(byteArrayOutputStream.toString()); // 如果想要给客户端发送点什么 // socket.getOutputStream(),获取输出流,然后在进行操作 } catch (IOException e) { e.printStackTrace(); } finally { // 5.关闭 if (byteArrayOutputStream != null) { try { byteArrayOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (socket != null) { try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } if (serverSocket != null) { try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
UDP
DatagramSocket
DatagramPacket
s@Test public void sender() throws IOException { DatagramSocket datagramSocket = new DatagramSocket(); String str = "UDP发送方式"; byte[] bytes = str.getBytes(); InetAddress inetAddress = InetAddress.getLocalHost(); DatagramPacket datagramPacket = new DatagramPacket(bytes,0,bytes.length,inetAddress,8899); datagramSocket.send(datagramPacket); datagramSocket.close(); } @Test public void receiver() throws IOException { DatagramSocket datagramSocket = new DatagramSocket(8899); byte[] bytes = new byte[200]; DatagramPacket datagramPacket = new DatagramPacket(bytes,0,bytes.length); datagramSocket.receive(datagramPacket); System.out.println(new String(datagramPacket.getData(),0,datagramPacket.getLength())); datagramSocket.close(); }
URL
统一资源定位符
@Test public void downLoad() { HttpsURLConnection urlContent = null; InputStream inputStream = null; FileOutputStream fileOutputStream = null; try { URL url = new URL("https://pic.cnblogs.com/avatar/2183514/20201017110603.png"); // 打开连接 urlContent = (HttpsURLConnection) url.openConnection(); // 连接 urlContent.connect(); // 获得输出流 inputStream = urlContent.getInputStream(); fileOutputStream = new FileOutputStream("1.png"); int len; byte[] bytes = new byte[1024]; while ((len = inputStream.read(bytes)) != -1) { fileOutputStream.write(bytes,0,len); } System.out.println("下载完成"); } catch (IOException e) { e.printStackTrace(); } finally { if (fileOutputStream != null) { try { fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (urlContent != null) { urlContent.disconnect(); } } }
这篇关于网络编程基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-06小米11i印度快充版ROM合集:极致体验,超越期待
- 2024-10-06【ROM下载】小米11i 5G 印度版系统, 疾速跃迁,定义新速度
- 2024-10-06【ROM下载】小米 11 青春活力版,青春无极限,活力全开
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求