zoukankan      html  css  js  c++  java
  • Java网络编程

    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()是阻塞式的,必须等到客户端连接上才会解除阻塞。

  • 相关阅读:
    webservice测试工具
    Spring+CXF整合来管理webservice(服务器启动发布webservice)
    BAT常用命令
    【shell入门】Shell用法
    【shell】Shell命令合集(0)
    挨踢江湖之十二
    shell一些笔记
    在优化SQL语句中使用虚拟索引
    Jenkins Maven打包出错异常的解决方法
    [置顶] ios 360度旋转效果demo
  • 原文地址:https://www.cnblogs.com/cgl-dong/p/12154466.html
Copyright © 2011-2022 走看看