首页 > 编程语言 > 详细

Java网络编程

时间:2020-01-06 09:33:59      阅读:92      评论:0      收藏:0      [点我收藏+]

Java网络编程

简单了解一下Java的网络编程,JavaSE的学习我是跳过这部分的,在后来的Web学习中一直用的B/S架构,这部分用的不多,简单回顾一下。

Java中和网络编程有关的包在java.net.*包下,如InetAddress、NetworkInterface、Socket等。

1、网络接口类InetAddress、NetworkInterface

InetAddress、NetworkInterface是Java提供用于获取ip和mac相关的类。

InetAddress用于获取Ip相关。

该类没有构造方法,但提供了一系列静态方法用于获取相关对象。

例:获取本机ip:

public static void main(String[] args) throws UnknownHostException, IOException {
        InetAddress host=InetAddress.getLocalHost();//本机对象
    
        String hostname=host.getHostName();//获取主机名
        System.out.println("主机名:"+hostname);
        
        String hostAdd=host.getHostAddress();//获取主机ip
        System.out.println("主机地址:"+hostAdd);
        
    }
//主机名:DESKTOP-xxxxx
//主机地址:xx.xxx.xx.xxx

NetworkInterface网络接口类,用于获取网络接口相关,如获取mac地址。

    //获取本机硬件地址,返回byte数组
byte[] b= NetworkInterface.getByInetAddress(host).getHardwareAddress();
        
        StringBuilder str=new StringBuilder("");
        for(int i=0;i<b.length;i++) {
            if(i!=0) {
                str.append("-");//分割符
            }
            
            String mac=Integer.toHexString(b[i]&0xff);//转换为16进制
            if(mac.length()==1) {
                str.append("0"+mac);//补0
            }else{
                str.append(mac);
            }
        }
        System.out.println("网卡:"+str);

//网卡:c8-3d-d4-f0-xx-xx

2、套接字Socket编程

Socket,本质上就是一组接口,是对TCP/IP协议的封装和应用.

Socket编程主要涉及到客户端和服务器端两个方面,首先是在服务器端创建一个服务器套接字(ServerSocket),并把它附加到一个端口上,服务器从这个端口监听连接。端口号的范围是0到65536,但是0到1024是为特权服务保留的端口号,我们可以选择任意一个当前没有被其他进程使用的端口。

客户端请求与服务器进行连接的时候,根据服务器的域名或者IP地址,加上端口号,打开一个套接字。当服务器接受连接后,服务器和客户端之间的通信就像输入输出流一样进行操作。

Java中提供了Socket、ServerSocket类代表客户端和服务端。

模拟一个简单的通讯:

客户端ServerSocket

public static void main(String[] args) throws Exception {
        
        ServerSocket s=new ServerSocket(8001);//建立服务端,监听8001端口
        
        Socket socket = s.accept();//接收客户端
        System.out.println("等待连接");
        
        InputStream is = socket.getInputStream();//获取输入流

        byte[] b = new byte[1024];

        int n = is.read(b);//将客户端数据读入b中
    
    
        System.out.println("客户端发送内容为:" + new String(b,0,n));
        
    }

服务端Socket

public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        
        Socket s=new Socket("127.0.0.1",8001);//建立客户端、连接服务端套接字
        OutputStream o=s.getOutputStream();//获取输出流、发送数据到客户端
        byte[] b=new byte[1024];
        b="hello world".getBytes();
        o.write(b);
        System.out.println("发送完毕");

    }

运行服务端,保证服务端一直运行的情况下开启客户端,客户端和服务端分别打印:

发送完毕

等待连接
客户端发送内容为:hello world

阻塞式

在服务端程序中accept()是阻塞式的,必须等到客户端连接上才会解除阻塞。

Java网络编程

原文:https://www.cnblogs.com/cgl-dong/p/12154466.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!