java基础——网络编程基础TCP,URL

TCP部分

new socket对象

package ip;
/*
1.通过IP地址和域名new InetAddress对象
2.本地回路地址:127.0.0.1 对应localhost,表示本地主机
3.IP地址和端口号接在一起组成一个socket,类似于网络节点
@author zsben
@create 2020-01-07 15:34
*/

import java.net.InetAddress;
import java.net.UnknownHostException;

public class Iptest {

    public static void main(String[] args) {
        try {
            //File file = new File("hello.txt");File对应文件,Inet对应网络地址
            InetAddress inetAddress = InetAddress.getByName("192.168.10.14");
            System.out.println(inetAddress);

            InetAddress inetAddress1 = InetAddress.getByName("www.baidu.com");
            System.out.println(inetAddress1);

            InetAddress inetAddress2 = InetAddress.getByName("127.0.0.1");
            System.out.println(inetAddress2);

            InetAddress inetAddress3 = InetAddress.getLocalHost();
            System.out.println(inetAddress3);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }

}

客户端  发消息给  服务器

package tcp;
/*
实现TCP的网络编程
例子1:客户端发送信息给服务端,服务端将数据显示到控制台上
@author zsben
@create 2020-01-07 16:45
*/

import org.junit.Test;

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

public class TcpTest1 {

    //客户端发送数据
    @Test
    public void client()    {

        Socket socket = null;
        OutputStream os = null;

        try {
            //创建socket对象,指明服务器端的ip 和端口号
            InetAddress inet = InetAddress.getByName("172.23.104.31");
            socket = new Socket(inet,10000);

            //得到输出流并写数据,进行发送
            os = socket.getOutputStream();
            os.write("你好,我是client".getBytes());

        }
        catch (IOException e) {
            System.out.println(e.getMessage());;
        }//资源关闭
        finally {
            if(os!=null){
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(socket!=null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

    //服务端接收数据
    @Test
    public void server(){
        ServerSocket ss = null;
        Socket socket = null;
        InputStream is = null;
        ByteArrayOutputStream baos = null;

        try {
            ss = new ServerSocket(10000);//服务器端口

            socket = ss.accept();//调用accept接受来自客户端的socket

            is = socket.getInputStream();//从客户端socket得到输入流

            //从输入流里接受字节
            //防止字符的连续字节表示被截断出现乱码,必须保存一个完整的连续串
            baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[5];
            int len;
            while((len = is.read(buffer)) !=-1 )
                baos.write(buffer,0,len);//数据写到了baos,baos可以自动扩充容量

            System.out.println(baos.toString());

            //获取客户端的ip地址
            System.out.println("收到了来自"+socket.getInetAddress().getHostAddress()+"的数据");
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            if(ss!=null){
                try {
                    ss.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(socket!=null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(is!=null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(baos!=null){
                try {
                    baos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) {

    }
}

客户端发文件给服务器

package tcp;
/*
客户端发送文件给服务器,服务器将文件保存在本地:
知识点:文件传输
@author zsben
@create 2020-01-07 22:43
*/

import org.junit.Test;

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

public class TcpTest2 {
    @Test
    public void client(){
        Socket socket = null;
        OutputStream os = null;
        FileInputStream fis = null;
        try {
            //1.获取socket
            InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
            socket = new Socket(inetAddress, 12000);
            //2.获取socket的输出流
            os = socket.getOutputStream();
            //os.write("hello,i am client".getBytes());
            //3.获取文件的输入流
            fis = new FileInputStream("zsbenn.jpg");
            //4.fis->os
            byte[] buffer = new byte[1020];
            int len;
            while((len = fis.read(buffer))!=-1){
                os.write(buffer,0,len);
            }

        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        finally {
            if(os!=null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(socket!=null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fis!=null){
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Test
    public void server()  {
        ServerSocket ss = null;
        Socket socket = null;
        InputStream is = null;
        FileOutputStream fos = null;
        try {
            //1.获取服务器socket
            ss = new ServerSocket(12000);
            //获取客户端socket
            socket = ss.accept();
            //获取客户端socket的输入流
            is = socket.getInputStream();

            //服务器端创建一个输出流,接受客户端发送的文件
            fos = new FileOutputStream("zsbennn.jpg");

            //读取客户端的文件
            byte[] buffer = new byte[1004];
            int len;
            while((len=is.read(buffer)) != -1)
                fos.write(buffer,0,len);

        } catch (IOException e) {
            System.out.println(e.getMessage());;
        }
        finally {
            if(socket!=null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(ss!=null) {
                try {
                    ss.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fos!=null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(is!=null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

客户端发送终止信号给服务器

package tcp;
/*
客户端发送文件给服务器,服务器将文件保存在本地,再给客户端发送一个接受成功
知识点:输出终止信号使用
@author zsben
@create 2020-01-07 22:43
*/

import org.junit.Test;

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

public class TcpTest3 {
    @Test
    public void client(){
        Socket socket = null;
        OutputStream os = null;
        FileInputStream fis = null;
        try {
            //1.获取socket
            InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
            socket = new Socket(inetAddress, 12000);
            //2.获取socket的输出流
            os = socket.getOutputStream();
            //os.write("hello,i am client".getBytes());
            //3.获取文件的输入流
            fis = new FileInputStream("zsbenn.jpg");
            //4.fis->os
            byte[] buffer = new byte[1020];
            int len;
            while((len = fis.read(buffer))!=-1){
                os.write(buffer,0,len);
            }

            //关闭数据的输出,强制终止输出
            socket.shutdownOutput();

            //5.接受来自服务器的数据,显示到控制台上
            InputStream is = socket.getInputStream();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            while((len = is.read(buffer))!=-1) {
                baos.write(buffer,0,len);
            }
            System.out.println(baos.toString());

            baos.close();
            is.close();

        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        finally {
            if(os!=null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(socket!=null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fis!=null){
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Test
    public void server()  {
        ServerSocket ss = null;
        Socket socket = null;
        InputStream is = null;
        FileOutputStream fos = null;
        try {
            //1.获取服务器socket
            ss = new ServerSocket(12000);
            //2.获取客户端socket
            socket = ss.accept();
            //3.获取客户端socket的输入流
            is = socket.getInputStream();

            //4.服务器端创建一个输出流,接受客户端发送的文件
            fos = new FileOutputStream("zsbennn.jpg");

            //5.读取客户端的文件
            byte[] buffer = new byte[1004];
            int len;
            //服务器得等到客户端强制终止输出,才算输出完成
            while((len=is.read(buffer)) != -1)
                fos.write(buffer,0,len);

            System.out.println("图片传输完成");

            //6.服务器给客户端反馈
            OutputStream os = socket.getOutputStream();
            os.write("数据接收成功".getBytes());

            os.close();

        } catch (IOException e) {
            System.out.println(e.getMessage());;
        }
        finally {
            if(socket!=null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(ss!=null) {
                try {
                    ss.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fos!=null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(is!=null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

URL部分

package url;
/*
URL:统一资源定位符
1.URL:同一资源定位符,对应着互联网的某一资源地址
2.格式:
    http://localhost:8080/examples/beauty.jpg?username=Tom
    协议   主机名     端口号  资源地址              参数列表
@author zsben
@create 2020-01-08 22:30
*/

import java.net.MalformedURLException;
import java.net.URL;

public class URLTest1 {

    public static void main(String[] args) {
        try {
            URL url = new URL("http://localhost:8080/examples/beauty.jpg?username=Tom");
            System.out.println("get协议名:"+url.getProtocol());
            System.out.println("get主机名:"+url.getHost());
            System.out.println("get端口号:"+url.getPort());
            System.out.println("get路径:"+url.getPath());
            System.out.println("get文件名:"+url.getFile());
            System.out.println("getQuery:"+url.getQuery());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

    }
}
package url;
/*

@author zsben
@create 2020-01-08 22:46
*/

import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class URLTest2 {

    public static void main(String[] args) {

        try {
            URL url = new URL("http://dmimg.5054399.com/allimg/pkm/pk/22.jpg");
            //打开一个关于Http服务器的连接
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            //获取连接
            urlConnection.connect();
            //从链接里获取输入流
            InputStream is = urlConnection.getInputStream();
            FileOutputStream fos = new FileOutputStream("image.jpg");

            byte[] buffer = new byte[1020];
            int len;
            while((len = is.read(buffer))!=-1){
                fos.write(buffer,0,len);
            }

            System.out.println("下载完成");

            //关闭资源
            is.close();
            fos.close();
            urlConnection.disconnect();//断开连接

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

原文地址:https://www.cnblogs.com/zsben991126/p/12169313.html

时间: 2025-01-10 10:10:20

java基础——网络编程基础TCP,URL的相关文章

Java NIO 网络编程基础

Java NIO提供了一套网络api,可以用来处理连接数很多的情况.他的基本思想就是用一个线程来处理多个channel. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899

Java 之 网络编程基础知识

一.网络的概念和分类 1.概念 计算机网络:把分布在不同地里区域的计算机与专门的外部设备用通信线路互连成一个规模大.功能强的网络系统,从而使众多的计算机可以方便地互相传递信息.共享硬件.软件.数据信息等资源. 2.分类 (1)按照网络的传输介质划分: 双绞线网.同轴电缆网.光纤网.卫星网.还有无线传输(WiFi传输介质是红外线.蓝牙传输介质是无线电波等) (2)按照网络的拓扑结构划分: 星型网络.总线网络.环线网络.树型网络.网状网络.混合型网络等. (3)按照规模来划分 局域网(Local A

【tcp-ip学习总结】socket编程基础/网络编程基础

两个网络程序之间需要通信就需要在他们之间建立一个链接通道,这个通道就是由一个五元组组成 五元组:(协议.本地IP地址.本地端口号.远程IP地址.远程端口号) socket编程原理 socket套接口 网络程序之间通信是依靠socket套接口进行通信. 例如:主机A上面的QQ程序需要发送消息到主机B上面的QQ,步骤就是: ①主机A上面的QQ发消息存到主机A上面的socket中 ②这个socket通过主机A的网络管理软件通过网络接口卡传到主机B中得网络接口卡 ③主机B的网络接口卡接收到消息后再传给主

Java:网络编程值TCP的使用

演示TCP传输 1.Tcp分客户端和服务端 2.客服端对应的对象是scoket 服务端对应的对象是serverscoket 客户端: 通过查阅scoket对象,发现在建立对象时,就可以连接指定的主机. 因为tcp是面向连接的,所以在建立scoket服务时,就要有服务端存在,并连接成功,形成通路后,在该通道进行数据的传输. 需求:给服务端发送一个文本数据 步骤: 1.创建Socket服务并指定要连接的主机和端口.可以采用构造方法Socket(String host, int port)或对象方法c

Java网络编程基础(六)— 基于TCP的NIO简单聊天系统

在Java网络编程基础(四)中提到了基于Socket的TCP/IP简单聊天系统实现了一个多客户端之间护法消息的简单聊天系统.其服务端采用了多线程来处理多个客户端的消息发送,并转发给目的用户.但是由于它是基于Socket的,因此是阻塞的. 本节我们将通过SocketChannel和ServerSocketChannel来实现同样的功能. 1.客户端输入消息的格式 username:msg    username表示要发送的的用户名,msg为发送内容,以冒号分割 2.实现思路 实现思路与Java网络

Java网络编程和NIO详解开篇:Java网络编程基础

Java网络编程和NIO详解开篇:Java网络编程基础 计算机网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为我们拥有网络.网络是一个神奇的东西,它改变了你和我的生活方式,改变了整个世界. 然而,网络的无标度和小世界特性使得它又是复杂的,无所不在,无所不能,以致于我们无法区分甚至无法描述. 对于一个码农而言,了解网络的基础知识可能还是从了解定义开始,认识OSI的七层协议模型,深入Socket内部,进而熟练地

Java网络编程和NIO:Java网络编程基础

转自: https://www.cnblogs.com/midiyu/p/7875574.html 关于网络 网络协议 如同人与人之间相互交流是需要遵循一定的规矩一样,计算机之间能够进行相互通信是因为它们都共同遵守一定的规则,即网络协议. 网络体系结构 计算机网络是个复杂的系统,按照人们解决复杂问题的方法,把计算机网络实现的功能分到不同的层次上,层与层之间用接口连接.通信的双方具有相同的层次,层次实现的功能由协议数据单元(PDU)来描述.不同系统中的同一层构成对等层,对等层之间通过对等层协议进行

Java网络编程基础【转】

网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.

Java笔记二十三.网络编程基础与UDP编程

网络编程基础与UDP编程 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.网络编程基础 1.TCP/IP协议:TCP/IP协议是一个非常实用的网络应用程序通信协议,包括TCP(传输控制协议)和IP地址(计算机唯一标识号). 2.IP地址:IP在互联网中能唯一标识一台计算机,是每一台计算机的唯一标识(身份证),通过这个标识号来指定接收数据的计算机和识别发送数据的计算机,该标识号即为IP地址. (1)Ipv4:指在计算机中IP地址用4个字节(