---java 网络编程总结

InetAddress

/*
 * inetAddress代表ip地址
 * 创建Inetaddress对象:getByName(String name)
 * getHostName():获取域名
 * getHostAddress:获取IP地址
 */
public class TestInetAddress {
    @Test
    public void test() throws Exception {
        // 创建一个Inetaddress对象
        InetAddress ia = InetAddress.getByName("www.baidu.com");
        System.out.println(ia); // www.baidu.cm/61.135.169.125
        // InetAddress ia2 = InetAddress.getByName("61.135.169.125");
        // System.out.println(ia2);/// 61.135.169.125

        System.out.println(ia.getHostName());// www.baidu.com
        System.out.println(ia.getHostAddress());// 61.135.169.125

        // 获取本机ip:getlocalhost
        InetAddress ia3 = InetAddress.getLocalHost();
        System.out.println(ia3);// tuxianchao_PC/192.168.1.105
        System.out.println(ia3.getHostName());// tuxianchao_PC
        System.out.println(ia3.getHostAddress());// 192.168.1.105

    }
}

tcp

/*
 *
 * TCP编程例一:客户端给服务端发送信息。服务端输出此信息到控制台上
 * 网络编程实际上就是Socket的编程
 */
public class TestTCP1 {
    @Test
    public void Client() {
        Socket socket = null;
        OutputStream os = null;
        try {
            // 1.创建一个Socket的对象,通过构造器指明服务端的IP地址,以及其接收程序的端口号
            socket = new Socket("127.0.0.1", 9090);
            // 2.getOutputStream():发送数据,方法返回OutputStream的对象
            os = socket.getOutputStream();
            // 3.具体的输出过程
            os.write("我是客户端".getBytes());
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            // 4.关闭相应的流和Socket对象
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

    @Test
    public void Server() {

        // 1.创建一个ServerSocket的对象,通过构造器指明自身的端口号
        ServerSocket ss = null;
        // 2.调用其accept()方法,返回一个Socket的对象
        Socket s = null;
        // 3.调用Socket对象的getInputStream()获取一个从客户端发送过来的输入流
        InputStream is = null;
        try {
            ss = new ServerSocket(9090);
            System.out.println("服务端已经启动");
            s = ss.accept();
            is = s.getInputStream();
            // 4.对获取的输入流进行的操作
            System.out.print("客户端发来:");
            byte[] b = new byte[20];
            int len;
            while ((len = is.read(b)) != -1) {
                String str = new String(b, 0, len);
                System.out.print(str);
            }
            System.out.println();
            System.out.println(
                    "收到:" + s.getInetAddress().getHostName() + "    " + s.getInetAddress().getHostAddress() + "的连接");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            // 5.关闭相应的流以及Socket、ServerSocket的对象
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (s != null) {
                try {
                    s.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (ss != null) {
                try {
                    ss.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}
/*
 *
 * TCP编程例二
 */
public class TestTCP2 {
    @Test
    public void Client() {
        Socket s = null;
        OutputStream os = null;
        InputStream is = null;
        try {
            s = new Socket("127.0.0.1", 9090);
            os = s.getOutputStream();
            os.write("我是客户端".getBytes());
            s.shutdownOutput();// 显示的告诉服务端发送完毕
            is = s.getInputStream();
            byte[] b = new byte[20];
            int len;
            while ((len = is.read(b)) != -1) {
                String str = new String(b, 0, len);
                System.out.print(str);
            }
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (s != null) {
                try {
                    s.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

    @Test
    public void Server() {
        ServerSocket ss = null;
        Socket s = null;
        InputStream is = null;
        OutputStream os = null;
        try {
            ss = new ServerSocket(9090);
            System.out.println("服务端已经启动");
            s = ss.accept();
            is = s.getInputStream();
            byte[] b = new byte[20];
            int len;
            while ((len = is.read(b)) != -1) {
                String str = new String(b, 0, len);
                System.out.print(str);
            }
            os = s.getOutputStream();
            os.write("我已经收到客户端发来的消息".getBytes());
            s.shutdownOutput();// 显示的告诉客户端发送完毕

            System.out.println();
            System.out.println("收到:" + s.getInetAddress().getHostName() + s.getInetAddress().getHostAddress() + "的消息");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (is != null) {

                try {
                    is.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (s != null) {

                try {
                    s.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (ss != null) {
                try {
                    ss.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        }
    }
}
/*
 * TCP编程例三:从客户端发送文件给服务端,服务端保存到本地。
 * 并返回“发送成功”给客户端。并关闭相应的连接。
 */
public class TestTCP3 {
    @Test
    public void Client() {
        Socket s = null;
        OutputStream os = null;
        FileInputStream fis = null;
        InputStream is = null;
        try {
            // 1.创建Socket的对象
            s = new Socket("127.0.0.1", 9090);
            // 2.从本地获取一个文件发送给服务端
            os = s.getOutputStream();
            fis = new FileInputStream(new File("C:\\Users\\tuxianchao\\Desktop\\image.jpg"));
            byte[] b = new byte[1024];
            int len;
            while ((len = fis.read(b)) != -1) {
                os.write(b, 0, len);
            }
            s.shutdownOutput();
            // 3.接收来自于服务端的信息
            is = s.getInputStream();
            byte[] b1 = new byte[1024];
            int len1;
            while ((len1 = is.read(b1)) != -1) {
                String str = new String(b1, 0, len);
                System.out.print(str);
            }
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            // 4.关闭相应的流和Socket对象
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (s != null) {
                try {
                    s.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

    @Test
    public void Server() {

        ServerSocket ss = null;

        Socket s = null;

        InputStream is = null;
        FileOutputStream fos = null;

        OutputStream os = null;
        try {
            // 1.创建ServerSocket对象
            ss = new ServerSocket(9090);
            System.out.println("服务端已经启动");
            // 2.创建Socket对象
            s = ss.accept();
            // 3.将从客户端发送来的信息保存到本地
            is = s.getInputStream();
            fos = new FileOutputStream(new File("C:\\Users\\tuxianchao\\Desktop\\image1.jpg"));
            byte[] b = new byte[1024];
            int len;
            while ((len = is.read(b)) != -1) {
                fos.write(b, 0, len);// 将文件写出到本地
            }

            System.out
                    .println("收到来自于:" + s.getInetAddress().getHostName() + s.getInetAddress().getHostAddress() + "的文件");
            System.out.println("文件已经写入本地");
            // 4.发送"接收成功"的信息反馈给客户端
            os = s.getOutputStream();
            os.write("已经收到文件".getBytes());

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            // 5.关闭相应的流和Socket及ServerSocket的对象
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (s != null) {
                try {
                    s.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }
    }
}

udp

*
 * UDP编程实现发送消息
 *
 *
 */
public class TestUDP {
    @Test
    // 发送端
    public void Send() {
        DatagramSocket ds = null;
        try {
            // 创建一个DatagramSocket
            ds = new DatagramSocket();
            // 要发送的信息
            byte[] b = "这里是发送的数据".getBytes();
            // 创建一个数据报:每一个数据报不能大于64k,都记录着数据信息,
            // 将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。
            DatagramPacket packet = new DatagramPacket(b, 0, b.length, InetAddress.getByName("127.0.0.1"), 9090);

            // 发送数据报
            ds.send(packet);
            System.out.println("(发送端)发送完毕");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            // 关闭
            if (ds != null) {
                ds.close();
            }
        }
    }

    @Test
    public void Rceive() {

        DatagramSocket ds = null;

        try {
            // 创建DatagramSocket
            ds = new DatagramSocket(9090);
            // 接收数据的容器
            byte[] b = new byte[1024];
            // 创建DatagramPacket来接收数据
            DatagramPacket packet = new DatagramPacket(b, 0, b.length);

            // 接收数据报
            ds.receive(packet);
            System.out.println("(接收端)收到消息:");
            // 输出收到的信息
            String str = new String(packet.getData(), 0, packet.getLength());
            System.out.println("(接收端)" + str);
        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            // 关闭
            if (ds != null) {
                ds.close();
            }
        }
    }
}

url

/*
 *
 * URL:统一资源定位符,一个URL的对象,对应着互联网上一个资源。
 * 可以通过URL的对象调用其相应的方法,将此资源读取(“下载”)
 *
 *
 *
         * public String getProtocol( ) 获取该URL的协议名
         *
         * public String getHost( ) 获取该URL的主机名
         *
         * public String getPort( ) 获取该URL的端口号
         *
         * public String getPath( ) 获取该URL的文件路径
         *
         * public String getFile( ) 获取该URL的文件名
         *
         * public String getRef( ) 获取该URL在文件中的相对位置
         *
         * public String getQuery( ) 获取该URL的查询名
 */
public class TestURL {

    @Test
    public void Test() {

        InputStream is = null;
        URL mUrl = null;
        try {
            // 1.创建一个URL的对象
            mUrl = new URL("http://www.baidu.com");
            // 2.将服务端的资源读取进来:openStream()
            is = mUrl.openStream();
            byte[] b = new byte[1024];
            int len;
            while ((len = is.read(b)) != -1) {
                String str = new String(b, 0, len);
                System.out.println(str);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

        // 如果既有数据的输入,又有数据的输出,则考虑使用URLConnection
        // 这里把获取到的数据写入到本地文件

        InputStream is1 = null;
        FileOutputStream fos = null;
        try {
            URLConnection urlConn = mUrl.openConnection();
            is1 = urlConn.getInputStream();
            fos = new FileOutputStream(new File("C:\\Users\\tuxianchao\\Desktop\\1.html"));
            byte[] b1 = new byte[1024];
            int len1;
            while ((len1 = is1.read(b1)) != -1) {
                fos.write(b1, 0, len1);
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (is1 != null) {
                try {
                    is1.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}
时间: 2024-12-17 05:05:40

---java 网络编程总结的相关文章

用java网络编程中的TCP方式上传文本文件及出现的小问题

自己今天刚学java网络编程中的TCP传输,要用TCP传输文件时,自己也是遇到了一些问题,抽空把它整理了一下,供自己以后参考使用. 首先在这个程序中,我用一个客户端,一个服务端,从客户端上传一个文本文件给服务端,服务端接收数据并显示“上传成功”给客户端. 客户端: 1 import java.io.BufferedReader; 2 import java.io.FileReader; 3 import java.io.IOException; 4 import java.io.InputStr

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

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

java网络编程serversocket

转载:http://www.blogjava.net/landon/archive/2013/07/24/401911.html Java网络编程精解笔记3:ServerSocket详解ServerSocket用法详解 1.C/S模式中,Server需要创建特定端口的ServerSocket.->其负责接收client连接请求. 2.线程池->包括一个工作队列和若干工作线程->工作线程不断的从工作队列中取出任务并执行.-->java.util.concurrent->线程池

20145311实验四 "Java网络编程及安全"

20145311实验四 "Java网络编程及安全" 程序设计过程 实验内容 ·掌握Socket程序的编写:·掌握密码技术的使用:·设计安全传输系统 ·利用加解密代码包,编译运行代码,一人加密,一人解密:·集成代码,一人加密后通过TCP发送: 实验步骤 在这之前进行了一个socket连接的例子:用百度做了个实验 下面是两人合作进行RSA的加密: 首先建立一个Socket对象,用来连接特定服务器的指定端口(我负责的是服务器端,郑凯杰负责的是客户端,所以也就是输入我这边的ip地址),输入的参

java网络编程socket解析

转载:http://www.blogjava.net/landon/archive/2013/07/02/401137.html Java网络编程精解笔记2:Socket详解 Socket用法详解 在C/S通信模式中,client需要主动创建于server连接的Socket(套接字).服务器端收到了客户端的连接请求,也会创建与客户连接的Socket.Socket可看做是通信两端的收发器.server与client都通过Socket来收发数据. 1.构造Socket 1.Socket() 2.So

20145331实验五 Java网络编程及安全

实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统 4.结队伙伴:20145333赵嘉鑫 博客地址:http://home.cnblogs.com/u/5301z/ 5.分工:自己负责服务端,伙伴负责客户端 实验要求 1.基于Java Socket实现安全传输 2.基于TCP实现客户端和服务器,结对编程一人负责客户端,一人负责服务器 3.使用Git进行版本控制 4.选择对称算法进行数据加解密. 5.选择非对称算法对对称加密密

20145301实验五 Java网络编程及安全

北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.05.06 18:30-21:30 实验名称:实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务器的公钥加密,计算明文的Hash函数值,一起传送给客户端 4.客户端用RSA公钥密码中服务器的私钥解密DES的,秘钥,用秘钥对密文进行解密,得出明文.计算

实验五 Java网络编程及安全

北京电子科技学院 实      验      报      告 课程:移动平台应用开发实践  班级:201592   姓名:曾俊宏  学号:20159210 成绩:___________  指导老师:娄嘉鹏    实验日期 :2015.10.25 实验名称:                          Java 网络编程及安全 实验内容:      1.掌握 Socket程序的编写    2.掌握密码技术的使用    3.设计安全传输系统 我的实验搭档是蔡斌思    http://www.

java网络编程socket\server\TCP笔记(转)

java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅 1 TCP的开销 a  连接协商三次握手,c->syn->s,s->syn ack->c, c->ack->s b  关闭协商四次握手,c->fin->s, s->ack-c,s->fin->c,c->ack->s c  保持数据有序,响应确认等计算开销 d

java网络编程与安全

北京电子科技学院(BESTI) 实     验    报     告 课程:JAVA程序设计  班级:1253   姓名:魏昊卿  小组伙伴:杨舒雯 学号:20135203   伙伴:20135324 成绩:             指导教师:娄嘉鹏          实验日期:2015.6.09 实验密级:  无     预习程度:            实验时间15:30~18:00 仪器组次:         必修/选修:选修                 实验序号:04 实验名称:ja