Java——网络编程

1. IP

package net;

import java.net.*;
import java.util.Arrays;

public class IPTest {

    public static void main(String[] args) {

        try {
            //不能new,所以用构造方法
            InetAddress ip = InetAddress.getByAddress(new byte[]{10,1,1,1});//ip地址
            System.out.println(ip);

            ip = InetAddress.getByAddress("testip", new byte[]{10,1,1,2});
            System.out.println(ip);

            ip = InetAddress.getByName("www.sdut.edu.cn");//从其他网站直接获得
            System.out.println(ip);

            ip = InetAddress.getLocalHost();//获取本机的地址
            System.out.println(ip);

            //ip为一个类
            System.out.println(ip.getHostName());
            System.out.println(ip.getHostAddress());

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

}

输出:
/10.1.1.1
testip/10.1.1.2
www.sdut.edu.cn/210.44.176.169
949/10.6.17.49
949
10.6.17.49

2. URL

package net;

import java.net.*;

public class URLTest {

    public static void main(String[] args) {
        try {
            URL url = new URL("http://etc.sdut.edu.cn:90/meol/jpk/course/layout/newpage/index.jsp?courseId=15679&path=1111##");
            System.out.println(url.getProtocol());//协议
            System.out.println(url.getHost());//主机名
            System.out.println(url.getPort());//端口号

            System.out.println(url.getDefaultPort());//协议的默认端口号。根据协议

            System.out.println(url.getPath());//路径
            System.out.println(url.getFile());//文件
            System.out.println(url.getQuery());//查询字符串。?后面的键值对
            System.out.println(url.getRef());//引用
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }

}

输出:
http
etc.sdut.edu.cn
90
80
/meol/jpk/course/layout/newpage/index.jsp
/meol/jpk/course/layout/newpage/index.jsp?courseId=15679&path=1111
courseId=15679&path=1111
#

90为自己加的,如果不在主机名后面加端口号,则输出-1

3. TCP协议通信
打电话!

//服务器

//服务器

package net;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {

    public static void main(String[] args) {
        try {

            ServerSocket ss = new ServerSocket(8888);//服务器端只需提供端口号
            while (true) {
            Socket socket = ss.accept();//等待连接
            //socket为端口号和ip地址的组合
            System.out.println("服务器端:"+socket);

            //服务器端得到数据
            System.out.println("服务器端读取数据!");
            InputStream is = socket.getInputStream();
            byte[] bytes = new byte[1024];
            int len = 0;
            String str = null;
            while((len = is.read(bytes)) != -1){
                str = new String(bytes, 0, len);
                System.out.println(str);
            }
            socket.shutdownInput();
            is.close();

            //服务器得到信息之后向客户端进行反馈
            OutputStream os = socket.getOutputStream();
            os.write(("HELLO CLIENT,我收到了信息:" + str).getBytes());
            System.out.println("服务器端写出数据完毕!");
            socket.shutdownOutput();
            os.close();


            socket.close();
            if (str.equals("end"))
                break;

            }
         ss.close();

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


    }

}
//客户端
package net;

//客户端
package net;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class TCPClient {

    public static void main(String[] args) {
        try {
            Socket socket = new Socket(InetAddress.getLocalHost(),8888);//ip地址和端口号(服务器端)。此时用服务器端也在本机上,所以getLocalHost方法,否则用getAddress方法
            System.out.println("客户端:"+socket);


            //客户端主动输出一个字符串
            String data = "end";
            OutputStream os = socket.getOutputStream();
            os.write(data.getBytes());
            System.out.println("客户端数据写出完毕!");
            os.close();
            socket.shutdownOutput();

            //客户端收到服务器端的反馈
            System.out.println("客户端读取数据!");
            InputStream is = socket.getInputStream();
            byte[] bytes = new byte[1024];
            int len = 0;
            String str = null;
            while((len = is.read(bytes)) != -1){
                str = new String(bytes, 0, len);
                System.out.println(str);
            }

            socket.shutdownInput();
            is.close();

            socket.close();

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


    }

}

4. UDP协议通信
进行写信!

package net;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class UDPServer {

    /**
     * @param args
     */
    public static void main(String[] args) {
        try {
            DatagramSocket ds = new DatagramSocket(9999);

            byte[] buf = new byte[1024];//必须预估大小,所以不可靠,可能存不过来
            DatagramPacket dp = new DatagramPacket(buf, buf.length);//只需有缓冲区(字节数组)和大小
            ds.receive(dp);

            //
            byte[] data = dp.getData();
            int length = dp.getLength();
            InetAddress ipClient = dp.getAddress();
            int port = dp.getPort();

            String str = new String(data, 0, length);
            System.out.println("服务器端收到:" + str);

            //收到信后进行反馈
            String dataOut = "HELLO CLIENT,"+str;
            DatagramPacket dpOut = new DatagramPacket(dataOut.getBytes(), dataOut.length(), ipClient, port);
            ds.send(dpOut);


            ds.close();

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


    }

}
package net;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class UDPClient {

    public static void main(String[] args) {
        try {
            //运载工具:邮递员
            DatagramSocket ds = new DatagramSocket();

            String data = "HELLO UDPSever!";//信内容
            //数据报:打包
            DatagramPacket dp = new DatagramPacket(data.getBytes(), data.length(), InetAddress.getLocalHost(), 9999);//将数据和信封打包
            ds.send(dp);

            //接受反馈
            byte[] buf = new byte[1024];
            DatagramPacket dpIn = new DatagramPacket(buf, buf.length);
            ds.receive(dpIn);
            System.out.println(new String(dpIn.getData(), 0, dpIn.getLength()));




            ds.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();
        }


    }

}

输出:
服务器端:
服务器端收到:HELLO UDPSever!
客户端:
HELLO CLIENT,HELLO UDPSever!

猜你喜欢

转载自blog.csdn.net/gx17864373822/article/details/80223750