博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jva基础网络编程
阅读量:5034 次
发布时间:2019-06-12

本文共 10102 字,大约阅读时间需要 33 分钟。

网络编程

InetAddress获取ip地址

package cn.edu.yulinu.demo;import java.net.InetAddress;import java.net.UnknownHostException;/* * 表示互联网的IP地址 * java.net.InetAddress * 静态方法 * static InetAddress getLocalHost() * 返回本地主机 */public class InetAddressDemo {    public static void main(String[] args) throws UnknownHostException {        function();        function1();    }    /*     * 拿自己ip     */    public static void function() throws UnknownHostException {        InetAddress localHost = InetAddress.getLocalHost();        System.out.println(localHost);    }    /*     * 拿别人ip     */    public static void function1() throws UnknownHostException {        InetAddress inet = InetAddress.getByName("stxf.yulinu.edu.cn");        System.out.println(inet);    }}

udp接收和发送

UDPSend

package cn.edu.yulinu.demo1;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;import java.net.UnknownHostException;/* * 实现UDP协议的发送端 * 实现我们封装数据的类java.net.DatagramPacket 将数据包包装 * 实现数据书传输的类ajva.net.DatagramSocket 将数据包发送出去 *  * 实现步骤: * 1:创建DatagramPacket对象,封装数据,接收地址和端口 * 2:创建DatagramSocket * 3:调用DatagramSocket */public class UDPSend {        public static void main(String[] args) throws IOException {        //1:创建DatagramPacket对象,封装数据,接收地址和端口        byte[] date ="你好UDP".getBytes();        InetAddress inet = InetAddress.getByName("127.0.0.1");        DatagramPacket dp = new DatagramPacket(date, date.length, inet, 6000);        //2:创建DatagramSocket        DatagramSocket ds = new DatagramSocket();        //3:调用DatagramSocket        ds.send(dp);        //关闭资源        ds.close();    }    }

UDPReceive

package cn.edu.yulinu.demo1;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.SocketException;import java.util.Arrays;/* * 实现UDP接收端 * 实现封装数据博爱java.net.DatagramPacket将数据接收 * 实现输出传输java.net.DatagramSocket接收数据包 * 实现步骤: * 1:创建DatagramSocket对象,绑定端口号 要和发送端口号一致 * 2:创建字节数组,接收发来的数据 * 3:创建数据包对象DatagramPacket * 4:调用DatagramSocket对象方法receive(DatagramPacket dp)接收数据,数据放在数据包中 * 5:拆包(发送的IP地址,接收到的字节数组,发送方的端口号) */public class UDPReceive {    public static void main(String[] args) throws IOException {        //创建数据包传输对象DatagramSocket绑定端口号        DatagramSocket ds = new DatagramSocket(6000);        //创建字节数据,接收数据        byte[] data = new byte[1024];        //拆个年间数据包对象传递字节数组        DatagramPacket dp = new DatagramPacket(data, data.length);        //调用ds对象方法receive传递数据包        ds.receive(dp);        int length = dp.getLength();        System.out.println(new String(data,0,length));        System.out.println(dp.getAddress().getHostAddress()+" "+dp.getPort());        ds.close();    }}

TCP接收和发送

TCPServer

package cn.edu.yulinu.demo3;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;/* * 实现TCP服务器程序 * 表示服务器程序的类java.net.ServerSocket * 构造方法: * ServerSocket(int port)传递端口号 *  * 很重要的事情,必须要获得客户端套接字对象 * Socket accept() */public class TCPServer {    public static void main(String[] args) throws IOException {        //创建服务器端连接对象        ServerSocket server = new ServerSocket(8888);        //调用服务器套接字对象中的方法accept()获取客户端套接字对象        Socket socket = server.accept();        //通过客户端套接字对象,socket获取字节输入流,读取客户端发来的数据        InputStream in = socket.getInputStream();        byte[] date = new byte[1024];        int len = in.read(date);        System.out.println(new String(date,0,len));        //服务器向客户端回数据,字节输出流,通过客户端套接字对象获取字节输出流        OutputStream out = socket.getOutputStream();        out.write("收到。谢谢".getBytes());        socket.close();        server.close();    }}

TCPClient

package cn.edu.yulinu.demo3;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;/* * 实现TCP客户端,连接到服务器 * 和服务器实现数据交换 * 实现TCP客户端程序的类java.net.Socket * 构造方法 * Socket(String host,int port)传递服务器IP和端口号 * 注意:构造方法只要运行,就会和服务器进行连接,连接失败就抛出异常 * OutputStream getOutputStream() 返回套接字输出流 * 作用:将套接字输出,输出到服务器中 * InputStrtem getInputStream()返回套接字输入流 * 作用:从服务器端读取数据 */public class TCPClient {    public static void main(String[] args) throws  IOException {        //创建Socket对象,连接数据库        Socket socket = new Socket("127.0.0.1",8888);        //通过客户端的套接字对象Socket方法,获取字节输出流,将数据写向服务器        OutputStream out = socket.getOutputStream();        out.write("服务器OK".getBytes());        //读取服务器发回的数据,是信用socket套接字对象的字节输入流        InputStream in = socket.getInputStream();        byte[] data = new byte[1024];        int len = in.read(data);        System.out.println(new String(data,0,len));        socket.close();    }}

TCP上传图片案例

TCPServer

package cn.edu.yulinu.demo4;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.Random;/* * TCP图片上传服务器 * 1:ServerSocket套接字对象,监听端口8000 * 2:方法accept()获取客户端的连接对象 * 3:客户端连接对象获取字节输入流,读取客户端发送图片 * 4:创建一个File对象,绑定上传的文件夹 *     判断文件夹是否存在,文件夹不存在就创建 * 5:创建一个字节输出流,输出流的目的是File对象所在的文件夹 * 6:字节流读取图片,字节流将图片写入到目的文件夹中 * 7:将上传成功协会客户端 * 8:关闭资源 */public class TCPServer {    public static void main(String[] args) throws IOException {        ServerSocket server = new ServerSocket(8000);        Socket socket = server.accept();        //通过客户端连接对象,读取字节输入流,读取客户端图片        InputStream in = socket.getInputStream();        //将目的文件夹封装到File对象        File upload = new File("images\\upload");        if(!upload.exists()) {            upload.mkdirs();        }        //为了防止文件同名覆盖重新定义文件名        //规则:域名+毫秒值+6位随机数        String filename = "yulinu"+System.currentTimeMillis()+new Random().nextInt(999999)+".jpg";        //创建字节输出流,将图片写入到目的文件夹中        FileOutputStream fos = new FileOutputStream(upload+File.separator+filename);        //读写字节数组        byte[] bytes = new byte[1024];        int len = 0;        while((len=in.read(bytes))!=-1) {            fos.write(bytes, 0, len);        }        //通过客户端连接获取字节输出流        //将上传成功写回        socket.getOutputStream().write("上传成功".getBytes());        fos.close();        socket.close();        server.close();    }}

TCPClient

package cn.edu.yulinu.demo4;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;/* * 实现RCP图片上传案列 * 实现步骤: * 1;socket套接字连接服务器 * 2:通过socket获取字节输出流,目的是为了写图片 * 3:使用自己的流对象,读取图片数据源 *         FileInputStream * 4:读取图片使用字节输出流,将图片写道服务器 *     采用字节数组做缓冲 * 5:通过Socket套接字获取字节输入流 * 读取服务器发回来的上传成功 * 6:关闭资源 */public class TCPClient {    public static void main(String[] args) throws IOException{        Socket socket = new Socket("127.0.0.1",8000);        //获取字节输出流,将图片写到服务器中         OutputStream out = socket.getOutputStream();        FileInputStream fis = new FileInputStream("e:\\a.jpg");        int len = 0;        byte[] bytes = new byte[1024];        while((len=fis.read(bytes))!=-1) {            out.write(bytes,0,len);        }        //给服务器写终止序列        socket.shutdownOutput();        //获取字节输入流,获取服务器的上传成功        InputStream in = socket.getInputStream();        byte[] bytess = new byte[1024];        len = in.read(bytess);        System.out.println(new String(bytess,0,len));        fis.close();        socket.close();    }}

上传图片多线程改进版

TCPClient

package cn.edu.yulinu.demo4;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;/* * 实现RCP图片上传案列 * 实现步骤: * 1;socket套接字连接服务器 * 2:通过socket获取字节输出流,目的是为了写图片 * 3:使用自己的流对象,读取图片数据源 *         FileInputStream * 4:读取图片使用字节输出流,将图片写道服务器 *     采用字节数组做缓冲 * 5:通过Socket套接字获取字节输入流 * 读取服务器发回来的上传成功 * 6:关闭资源 */public class TCPClient {    public static void main(String[] args) throws IOException{        Socket socket = new Socket("127.0.0.1",8000);        //获取字节输出流,将图片写到服务器中         OutputStream out = socket.getOutputStream();        FileInputStream fis = new FileInputStream("e:\\a.jpg");        int len = 0;        byte[] bytes = new byte[1024];        while((len=fis.read(bytes))!=-1) {            out.write(bytes,0,len);        }        //给服务器写终止序列        socket.shutdownOutput();        //获取字节输入流,获取服务器的上传成功        InputStream in = socket.getInputStream();        byte[] bytess = new byte[1024];        len = in.read(bytess);        System.out.println(new String(bytess,0,len));        fis.close();        socket.close();    }}

Upload

package cn.edu.yulinu.demo4;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.Random;public class Upload implements Runnable {    private Socket socket;        public Upload(Socket socket) {        this.socket=socket;    }        @Override    public void run() {        try {        // TODO Auto-generated method stub        //通过客户端连接对象,读取字节输入流,读取客户端图片        InputStream in = socket.getInputStream();        //将目的文件夹封装到File对象        File upload = new File("images\\upload");        if(!upload.exists()) {            upload.mkdirs();        }        //为了防止文件同名覆盖重新定义文件名        //规则:域名+毫秒值+6位随机数        String filename = "yulinu"+System.currentTimeMillis()+new Random().nextInt(999999)+".jpg";        //创建字节输出流,将图片写入到目的文件夹中        FileOutputStream fos = new FileOutputStream(upload+File.separator+filename);        //读写字节数组        byte[] bytes = new byte[1024];        int len = 0;        while((len=in.read(bytes))!=-1) {            fos.write(bytes, 0, len);        }        //通过客户端连接获取字节输出流        //将上传成功写回        socket.getOutputStream().write("上传成功".getBytes());        fos.close();        socket.close();        }catch(IOException e) {                    }    }}

TCPThreadServer

package cn.edu.yulinu.demo4;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class TCPThreadServer {    public static void main(String[] args) throws IOException {                ServerSocket server = new ServerSocket(8000);        while(true) {            Socket socket =server.accept();            new Thread(new Upload(socket)).start();        }    }}

 

转载于:https://www.cnblogs.com/numberfive/p/9227578.html

你可能感兴趣的文章
列出所有的属性键
查看>>
js获取请求地址后面带的参数
查看>>
设计模式のCompositePattern(组合模式)----结构模式
查看>>
二进制集合枚举子集
查看>>
磁盘管理
查看>>
SAS学习经验总结分享:篇二—input语句
查看>>
UIImage与UIColor互转
查看>>
RotateAnimation详解
查看>>
系统管理玩玩Windows Azure
查看>>
c#匿名方法
查看>>
如何判断链表是否有环
查看>>
ssh无密码登陆屌丝指南
查看>>
MySQL锁之三:MySQL的共享锁与排它锁编码演示
查看>>
docker常用命令详解
查看>>
jQuery技巧大放送
查看>>
字符串转换成JSON的三种方式
查看>>
Hive时间函数笔记
查看>>
clojure-emacs-autocomplete
查看>>
一个自己写的判断2个相同对象的属性值差异的工具类
查看>>
10 华电内部文档搜索系统 search03
查看>>