java网络编程

java网络编程

最近项目不是太忙就想起java的网络编程,在这里自己做了一些总结
关于网络编程里的TCP/IP ,UDP在这里就不详细说明了,关于这些说明网上很多说法!


TCP编程主要是通过Socket和ServerSocket实现通信的

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

Socket和ServerSocket方法

常用构造方法构造方法解释
SocketSocket(InetAddress address, int port)创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
ServerSocketServerSocket(int port)创建绑定到特定端口的服务器套接字。

客户端代码

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Socket socket=null;
        //客户端使用输出流,往服务端发送数据
        OutputStream os=null;
        try {
        //127.0.0.1 本机IP 9393 自定义端口号
            socket=new Socket("127.0.0.1",9393);
            //通过Socket得到输出流的对象
            os=socket.getOutputStream();
            Scanner sc=new Scanner(System.in);
            String str=sc.next();
            os.write(str.getBytes());
            // TODO 是告诉服务端客户端信息发送完成
            socket.shutdownOutput();
            //服务端返回的信息
            InputStream is=socket.getInputStream();
            byte[] by=new byte[1024];
            int len=0;
            //读取服务端返回的信息内容
            while ((len=is.read(by))!=-1) {
                System.out.println(new String(by,0,len));

            }

        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
            if(os!=null){

                    os.close();

            }
            if(socket!=null){
                socket.close();

            }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

服务端代码

 public static void main(String[] args) {

            ServerSocket ss = null;
            Socket s = null;
            InputStream is = null;
            OutputStream os = null;
            try {
                ss = new ServerSocket(9393);
                //等待连接
                s = ss.accept();
                //回去输入流
                is = s.getInputStream();
                byte[] by = new byte[1024];
                int len = 0;
                //输出信息
                while ((len = is.read(by)) != -1) {
                    System.out.println(new String(by, 0, len));

                }
                os = s.getOutputStream();
                //收到客户端信息,返回给客户端的信息
                os.write("收到你的情意".getBytes());
            } 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();
                    }
                }
            }



    }

UDP编程主要是通过DatagramSocket和DatagramPacket实现通信的

DatagramSocket和DatagramPacket方法

客/服DatagramSocket常用构造方法DatagramPacket常用构造方法
客户端DatagramSocket() 构造数据报套接字并将其绑定到本地主机上任何可用的端口。DatagramPacket(byte[] buf, int offset, int length)构造 DatagramPacket,用来接收长度为 length 的包,在缓冲区中指定了偏移量。
服务端DatagramSocket(int port)创建数据报套接字并将其绑定到本地主机上的指定端口。DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port) 构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。

客户端代码


    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            DatagramSocket dSocket=new DatagramSocket();
            byte[] by="你好我是UDP".getBytes();
            //创建数据包 指定IP 和端口号
            DatagramPacket dPacket=new DatagramPacket(by, 0, by.length,InetAddress.getByName("127.0.0.1"),9393);
            //发送数据包
            dSocket.send(dPacket);

            dSocket.close();
        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

服务端代码

public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
        //建立连接
            DatagramSocket socket=new DatagramSocket(9393);
            byte[] by=new byte[1024];
            DatagramPacket packet=new DatagramPacket(by, 0, by.length);
            //读取数据包
            socket.receive(packet);

            System.out.println(new String(packet.getData(),0,packet.getLength()));
        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

URL就不介绍了 在下一篇APP内部更新应用介绍吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值