JAVASE-网络编程

本文介绍了Java网络编程中的关键要素,如InetAddress用于获取本机IP和主机名,URL处理统一资源定位符,以及套接字(Socket)在客户端和服务端的通信实现。通过实例展示了如何创建ServerSocket和Socket进行图片发送和接收。

01网络变成概述

网路编程三个基本要素
1.IP地址:定位网络某台计算机
2.端口号port:定位计算机某个进程
3.通信协议:通过IP地址和端口号定位,如何保增长数据可靠传输,这就需要依靠通信协议

网络编程基础类

InetAddress类

  1. InetAddress类:java.io.InetAddress getLocalHost() 得到本机的InetAddress对象 其中封装了IP地址和主机名 大多数网络类都要用到这个类,包括Socket ServerSocket URL DatagramSocket
  2. 常用静态方法
//获取本机的IP地址 和 主机名 的封装对象 :InetAddress
InetAddress localHost = InetAddress.getLocalHost();//获取本机的IP地址和主机名封装对象
//获取本机的IP地址
String hostAddress = localHost.getHostAddress();
System.out.println(hostAddress);
//获取本机的主机名
String hostName = localHost.getHostName();
System.out.println(hostName);

InetAddress byName = InetAddress.getByName("www.baidu.com");//通过域名获取InetAddress对象
System.out.println(byName.getHostAddress());//获取百度的IP地址

URL类
统一资源定位符

 //创建URL对象
        URL url = new URL("https://www.baidu.com/oa/index.html?name=zhangsan&password=123#tip");
        //获取URL中的信息
        String protocol = url.getProtocol();
        System.out.println("通信协议:"+protocol);//通信协议:https
        String path = url.getPath();
        System.out.println(path);///oa/index.html
        //获取URL中准备传输的数据
        String query = url.getQuery();
        System.out.println("需要提交的数据 "+query);//需要提交的数据 name=zhangsan&password=123

套接字

  1. 套接字是一种进程间的数据交换机制,利用套接字开发网络应用程序早已被广泛的采用,以至于成为事实上的标准。
  2. 在网络通信中,第一次主动发起通讯的程序称作客户端(client),而在第一次通讯中等待连接的程序被称作服务端,一旦通讯建立,则客户端和服务器端完全一样,没有本质区别
  3. 套接字与主机和端口号相连,主机地址就是客户端或服务器端所在的主机的IP地址,端口地址就是客户端或服务器程序使用的主机的通讯端口,在客户端和服务器中,分别创建独立的Socket,并通过Socket的属性,将两个Socket进行连接,这样客户端和服务器端通过套接字所建立的连接并使用IO进行通信。
//实现图片发送
package Socket_;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 接受客户端发送过来的图片 回复消息给客户端
 *
 */
public class ToWayServer {
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            serverSocket = new ServerSocket(8888);
            System.out.println("服务器启动成功,正在接受客户端的请求:");
            //开始接受客户端的请求
            Socket clinetSocket = serverSocket.accept();
            //读
             bis = new BufferedInputStream(clinetSocket.getInputStream());
            //开始读
            byte[] bytes = new byte[1024];
            int readCount = 0;
            bos = new BufferedOutputStream(new FileOutputStream("./Middle/src/Socket_/serverSpace/dog.jpg"));
            while((readCount = bis.read(bytes))!=-1){
                //将客户端发送过来的图片写入到服务器指定区域
                bos.write(bytes,0,readCount);

            }
            bos.flush();
            //回话
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(clinetSocket.getOutputStream()));
            bw.write("已收到");
            bw.flush();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            try {
                serverSocket.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            try {
                bis.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            try {
                bos.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

package Socket_;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * 完成发送一个图片给服务器 接受服务器返回的消息
 *
 */
public class TwoWayClient {
    public static void main(String[] args) throws IOException {
        //创建客户端套接字对象
        Socket socketClient = new Socket(InetAddress.getLocalHost(),8888);
        //发送一张图片给服务器
        BufferedOutputStream bos = new BufferedOutputStream(socketClient.getOutputStream());
        //开始写图片到服务器
        //一边读 一边写()
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\崔芸山\\老杜javase\\Middle\\src\\Socket_\\dog.jpg"));
        byte[] bytes = new byte[1024];
        int readCount = 0;
        while((readCount = bis.read(bytes))!=-1){
            bos.write(bytes,0,readCount);
        }
        //刷新
        bos.flush();
        bos.close();
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值