初识网络编程

初识Java网络编程
一、概述:

​ 网络编程是使用程序使两台(或多台)计算机之间进行数据传输,也即是编写在多台计算机上运行的程序,这些设备通过网络连接起来,程序间可以进行通信。

二、java.net包

​ java.net包提供了一些支持网络编程的类和接口,可直接使用,封装了底层的通信细节,使得开发网络编程变得更加简单。java.net提供了两种常见的网络协议:TCP(传输控制协议)和UDP(用户数据报协议),下面我们主要来分析一些Socket和URL。

三、Socket

​ Java.net包中的ServerSocket类用于表示服务器套接字,其主要功能是监听客户端的请求,当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器可以通过对 Socket 对象的写入和读取来进行通信。

以下步骤在两台计算机之间使用套接字建立TCP连接时会出现:

  • 服务器实例化一个 ServerSocket 对象,表示通过服务器上的端口通信。
  • 服务器调用 ServerSocket 类的 accept() 方法,该方法将一直等待,直到客户端连接到服务器上给定的端口。
  • 服务器正在等待时,一个客户端实例化一个 Socket 对象,指定服务器名称和端口号来请求连接。
  • Socket 类的构造函数试图将客户端连接到指定的服务器和端口号。如果通信被建立,则在客户端创建一个 Socket 对象能够与服务器进行通信。
  • 在服务器端,accept() 方法返回服务器上一个新的 socket 引用,该 socket 连接到客户端的 socket。

​ 连接建立后,通过使用 I/O 流在进行通信,每一个socket都有一个输出流和一个输入流,客户端的输出流连接到服务器端的输入流,而客户端的输入流连接到服务器端的输出流。TCP 是一个双向的通信协议,因此数据可以通过两个数据流在同一时间发送。

简单实例:

//服务端程序server
import java.net.*;
import java.io.*;
 
public class Server {
 
    public static void main(String[] args) {
        try {
            int port = args[0];
            ServerSocket serverSocket = new ServerSocket(port);
            
            System.out.println("监听端口号:port");
            //accept一直处于监听,知道收到客户端请求
            Socket socket = serverSocket.accept();

            //通过socket.getInputStream()获取输入流
            InputStream is = socket.getInputStream();
            //读取客户端发送的数据
            int massage = is.read();
            //打印
            System.out.println(massage);
            
            is.close();
            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
//客户端程序
import java.net.*;
import java.io.*;

public class Client {
    public static void main(String[] args) {

        try {
            String host = args[0];
            int port = args[1];
            Socket socket = new Socket(host, port);

            OutputStream os = socket.getOutputStream();

            //把输出流封装在DataOutputStream中
            DataOutputStream dos = new DataOutputStream(os);
            //使用dos.writeUTF发送字符串
            dos.writeUTF("来自客户端内容:Hello server!");
            
            dos.close();
            socket.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
//打开命令窗口,进入Server.java路径下,分别输入下面命令
$ javac Server.java 
$ java Server 8080

监听端口号:8080
来自客户端内容:Hello server!

//打开另一命令窗口,进入Client.java路径下,分别输入下面命令
$ javac Client.java 
$ java Client localhost 8080
四、URL

​ URL(Uniform Resource Locator)统一资源定位符,格式:protocol://host:port/path?query#fragment

例如:http://www.runoob.com/index.html?language=cn#j2se

URL解析:

  • 协议为(protocol):http

  • 主机为(host:port):www.runoob.com

  • 端口号为(port): 80 ,以上URL实例并未指定端口,因为 HTTP 协议默认的端口号为 80

  • 文件路径为(path):/index.html

  • 请求参数(query):language=cn

  • 定位位置(fragment):j2se,定位到网页中 id 属性为 j2se 的 HTML 元素位置 。

在java.net包中定义了URL类,该类用来处理有关URL的内容。详细参考见:菜鸟教程

【注】参考:菜鸟教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值