java网络编程(一)

java网络编程(一),第1张

java网络编程(一) java网络编程 1.InetAddress类 1.1说明:代表IP地址 1.2常见API:

通过静态方法获得InetAddress实例
getByName(String host):根据主机名称获得对应的InetAddress对象
getByAddress(byte[] addr):根据原始IP地址获得对应对象。
getLocalHost():得到本地的InetAddress对象
通过实例的方法获得对应的IP地址,及主机名称
String getHostName():得到此IP地址的主机名
String getCanonicalHostName():得到此IP地址的全限定域名。
String getHostAddress():得到这个对象对应的IP地址的字符串。

public static void main(String[] args) {
        try {
            InetAddress ip = InetAddress.getLocalHost();
            System.out.println("得到次ip地址的主机名" + ip.getHostName());
            System.out.println("得到次ip地址字符串" + ip.getHostAddress());
            System.out.println("得到次ip地址全限定域名" + ip.getCanonicalHostName());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
2.URL 2.1说明:

URL(Uniform Resource Locator)对象代表统一资源定位器,它是指互联网“资源”的指针。资源可以是简单的文件或目录,也可以his对更复杂对象的引用,比如对数据库或搜索引擎的查询。
URL可由 协议名,主机,端口和资源组成
protocol://host:port/resoureName

2.2常见API

URL类提供了多个构造器用于创建URL对象,通过实例对象访问URL对应的资源
String getFile():获取该URL的资源名。
String getHost():获取该URL的主机名。
String getPath():获得该URL的路径部分。
int getPort():获得该URL的端口号。
String getProtocol():获得该URL的协议名称。
String getQuery():获得该URL查询字符串部分。

如何将URL和IO流连接起来:
URLConnection openConnection():返回一个URLConnection对象,它代表了与URL所引用的远程对象的连接。
InputStream getInputStream:通过这个连接得到一个输入流。
InputStream openStream():打开与此URL的连接,并返回一个用于读取该URL资源的InputStream。

public static void main(String[] args) {
        try {
            //1.创建一个URL实例
            URL url =new URL("http://www.baidu.com");
            //2.建立一个与URL所引用的远程对象的连接
            URLConnection urlConn=url.openConnection();
            //3.通过连接得到一个IO流
            InputStream is = urlConn.getInputStream();
            //4.缓冲流
            BufferedReader br=new BufferedReader
                    (new InputStreamReader(is));
            String s;
            while ((s=br.readLine())!=null) {
                System.out.println(s);
            }
            br.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
3.Socket编程 3.1TCP/IP协议

使用TCP/IP协议开发的应用程序,一般会分为服务器端和客户端两部分。

3.2使用ServerSocket进行服务端开发

服务器端的主要功能是侦听服务器的某一端口,接受客户端的请求,与客户端进行数据交换(接收客户端数据并向客户端发送数据)。
Java使用ServerSocket类实现端口侦听,ServerSocket实例的accept方法用来等待并接受客户端的请求,该方法在运行时会阻塞当前程序直到连接建立为止,一旦连接建立成功,accept方法会返回一个Socket类的实例,通过该实例的getInputStream和getOutputStream方法接收或向客户端发送数据。最后调用ServerSocket实例或Socket实例的close方法关闭连接。

public static void main(String[] args) {
        //1.ServerSocket类用来实现端口的监听,其实例有accept()方法,等待并接收客户端的请求,
        //接收到请求,返回一个Socket实例,若无接收则一直阻塞程序
        ServerSocket serverSocket=null;
        //2.Socket实例的getInputStream方法和getOutStream方法得到接收和输出的流
        Socket socket = null;
        BufferedReader br = null;
        try {
            serverSocket=new ServerSocket(3333);
            System.out.println("服务器正在等待客户端连接。。。。。");
            //若无连接,阻塞
            socket=serverSocket.accept();
            br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            System.out.println("服务器已经接收到了客户端请求");
            String s=null;
            while ((s = br.readLine())!=null) {
                System.out.println(s);;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            while (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            while (serverSocket != null) {
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }while (socket != null); {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
3.3使用Socket进行客户端开发

客户端代码不需要使用ServerSocket类,也不需要使用Socket看的accept方法获取Socket实例,而是通过传入服务器的IP地址和端口两个参数来实例化Socket

public static void main(String[] args) {

        Socket socket = null;
        BufferedWriter bw = null;
        try {
            //得到本地IP
            InetAddress ip = InetAddress.getLocalHost();
            //1.建立Socket实例,传IP地址及端口
            socket = new Socket(ip.getHostAddress(), 3333);
            //2.建立缓存输出流
            bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            //3.写入输入
            bw.write("明年今日");
            //换行
            bw.newline();
            bw.write("今年明日");
            bw.newline();
            bw.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (bw != null) {
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5435664.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存