强哥说Java--网络编程(二)

简介: 强哥说Java--网络编程(二)

基于Socket的TCP实例



Java语言的基于套接字编程分为服务端编程和客户端编程。其通信模型如下图:


image.png


客户端Socket的工作过程包含以下四个基本的步骤:


➢创建Socket:根据指定服务端的IP地址或端口号构造Socket类对象。若服务器端响应,则建立客户端到服务器的通信线路。若连接失败,会出现异常。

➢打开连接到Socket的输入出流:使用 getInputStream()方法获得输入流,使用getOutputStream()方法获得输出流,进行数据传输

➢按照一定的协议对Socket进行读/写操作:通过输入流读取服务器放入线路的信息.(但不能读取自己放入线路的信息),通过输出流将信息写入线程。

➢关闭Socket:断开客户端到服务器的连接,释放线路


服务器程序的工作过程包含以下四个基本的步骤:


➢调用ServerSocket(int port) :创建一个服务器端套接字,并绑定到指定端口上。用于监听客户端的请求。

➢调用accept():监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字对象。

➢调用该Socket类对象的getOutputStream()和getInputStream ():获取输出流和输入流,开始网络数据的发送和接收。

➢关闭ServerSocket和Socket对象:客户端访问结束,关闭通信套接字。


服务器必须事先建立一个等待客户请求建立套接字 连接的ServerSocket对象。


接受就是accept方法


package com.caq.java;
import org.junit.Test;
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/**
 实现TCP的网络编程
 例题2:客户端发送文件给服务端,服务端将文件保存在本地。
 * @Date 2021/12/3 9:13
 * @Version 1.0
 */
public class TCPTest2 {
    //客户端
    @Test
    public void  client() throws IOException {
        //1.创建服务器端的ServeSocker,指明自己的端口号
        Socket socket = new Socket(InetAddress.getByName("localhost"),9090);
        //2.获取一个输出流,用于输出数据
        OutputStream os = socket.getOutputStream();
        //3.写出本地数据的操作
        FileInputStream fis = new FileInputStream("cxk1.jpg");
        byte[] buffer = new byte[1024];
        int len;
        while ((len = fis.read(buffer)) != -1){
            os.write(buffer,0,len);
        }
        //4.资源的关闭
        fis.close();
        os.close();
        socket.close();
    }
    //服务端
    @Test
    public void  server() throws IOException {
        //创建服务端ServerSocket,指明端口
        ServerSocket ss = new ServerSocket(9090);
        //2.获取客户端Socket
        Socket socket = ss.accept();
        //3.获取客户端输入流
        InputStream is = socket.getInputStream();
        //3.保存为本地文件
        FileOutputStream fos = new FileOutputStream("cxk2.jpg");
        //4.操作过程
        byte[] buffer = new byte[1024];
        int len;
        while ((len = is.read(buffer)) != -1){
            fos.write(buffer,0,len);
        }
        //5.资源的关闭
        fos.close();
        is.close();
        socket.close();
        ss.close();
    }
}

UDP和URL编程后续学Javaweb更新!!!


小结



位于网络中的计算机具有唯一的IP地址,这样不同的主机可以互相区分。

客户端一服务器是一种最常见的网络应用程序模型。服务器是一个为其客户端提供某种特定服务的硬件或软件。客户机是一个用户应用程序,用于访问某台服务器提供的服务。端口号是对一个服务的访问场所,它用于区分同一物理计算机上的多个服务。套接字用于连接客户端和服务器,客户端和服务器之间的每个通信会话使用一个不同的套接字。TCP协议用于实现面向连接的会话。


Java中有关网络方面的功能都定义在java.net程序包中。Java用InetAddress对象表示IP地址,该对象里有两个字段:主机名(String) 和IP地址(int)。


类Socket和ServerSocket实现了基于TCP协议的客户端一服务器程序。Socket是客户端和服务器之间的一个连接,连接创建的细节被隐藏了。这个连接提供了一个安全的数据传输通道,这是因为TCP协议可以解决数据在传送过程中的丢失、损坏、重复、乱序以及网络拥挤等问题,它保证数据可靠的传送。


类URL和URLConnection提供了最高级网络应用。URL的网络资源的位置来同一表示Internet上各种网络资源。通过URL_对象可以创建当前应用程序和URL表示的网络资源之间的连接,这样当前程序就可以读取网络资源数据,或者把自己的数据传送到网络上去。

相关文章
|
18天前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
46 11
|
2月前
|
Java 程序员
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
69 9
|
2月前
|
人工智能 Java 物联网
JAVA网络编程的未来:URL与URLConnection的无限可能,你准备好了吗?
随着技术的发展和互联网的普及,JAVA网络编程迎来新的机遇。本文通过案例分析,探讨URL与URLConnection在智能API调用和实时数据流处理中的关键作用,展望其未来趋势和潜力。
50 7
|
5月前
|
Java
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
65 1
|
2月前
|
网络协议 Java 物联网
Java网络编程知识点
Java网络编程知识点
55 13
|
2月前
|
Java 开发者
JAVA高手必备:URL与URLConnection,解锁网络资源的终极秘籍!
在Java网络编程中,URL和URLConnection是两大关键技术,能够帮助开发者轻松处理网络资源。本文通过两个案例,深入解析了如何使用URL和URLConnection从网站抓取数据和发送POST请求上传数据,助力你成为真正的JAVA高手。
68 11
|
2月前
|
安全 Java API
深入探索Java网络编程中的HttpURLConnection:从基础到进阶
本文介绍了Java网络编程中HttpURLConnection的高级特性,包括灵活使用不同HTTP方法、处理重定向、管理Cookie、优化安全性以及处理大文件上传和下载。通过解答五个常见问题,帮助开发者提升网络编程的效率和安全性。
127 9
|
2月前
|
JSON 安全 算法
JAVA网络编程中的URL与URLConnection:那些你不知道的秘密!
在Java网络编程中,URL与URLConnection是连接网络资源的两大基石。本文通过问题解答形式,揭示了它们的深层秘密,包括特殊字符处理、请求头设置、响应体读取、支持的HTTP方法及性能优化技巧,帮助你掌握高效、安全的网络编程技能。
78 9
|
2月前
|
JSON Java API
JAVA网络编程新纪元:URL与URLConnection的神级运用,你真的会了吗?
本文深入探讨了Java网络编程中URL和URLConnection的高级应用,通过示例代码展示了如何解析URL、发送GET请求并读取响应内容。文章挑战了传统认知,帮助读者更好地理解和运用这两个基础组件,提升网络编程能力。
60 5
|
2月前
|
数据采集 Java API
java怎么设置代理ip:简单步骤,实现高效网络请求
本文介绍了在Java中设置代理IP的方法,包括使用系统属性设置HTTP和HTTPS代理、在URL连接中设置代理、设置身份验证代理,以及使用第三方库如Apache HttpClient进行更复杂的代理配置。这些方法有助于提高网络请求的安全性和灵活性。