网络编程之Socket类和InetAddress类
来源:互联网 发布:虚拟陀螺仪的软件 编辑:程序博客网 时间:2024/05/18 19:20
Java中的网络支持
针对网络通信的不同层次,Java提供了不同的API,其提供的网络功能有四大类:
InetAddress:用于标识网络上的硬件资源,主要是IP地址
URL:统一资源定位符,通过URL可以直接读取或写入网络上的数据
Sockets:使用TCP协议实现的网络通信Socket相关的类
Datagram:使用UDP协议,将数据保存在用户数据报中,通过网络进行通信。
基于Socket的低层次Java网络编程
Socket通信:网络上的两个程序通过一个双向饿的通讯连接实现数据的交换,这个双向链路的一端被称为一个Socket,Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议中一个非常流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。
Socket通讯的一般过程
使用Socket进行Client/Server程序设计的一般连接过程是这样的:Server端Listent(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accpet(接受)消息。一个连接就建立起来了,Server端和Client端都可以通过Send,Write等方法与对方通信。
对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:
1:创建Socket
2:打开连接到Socket的输入输出流
3:按照一定的协议对Socket进行读写操作
4:关闭Socket
创建Socket
Java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。
其构造方法如下:
Socket(InetAddress address, int port); Socket(InetAddress address, int port, boolean stream); Socket(String host, int prot); Socket(String host, int prot, boolean stream); Socket(SocketImpl impl) Socket(String host, int port, InetAddress localAddr, int localPort) Socket(InetAddress address, int port, InetAddress localAddr, int localPort) ServerSocket(int port); ServerSocket(int port, int backlog); ServerSocket(int port, int backlog, InetAddress bindAddr)
其中address、host和port分别是双向连接中另一方的IP地址、主机名和端口号,stream指明socket是流socket还是数据报socket,localPort表示本地主机的端口号,localAddr和bindAddr是本地机器的地址(ServerSocket的主机地址),impl是socket的父类,既可以用来创建serverSocket又可以用来创建Socket。count则表示服务端所能支持的最大连接数。
例如:
Socket client = new Socket(“127.0.01.”, 80);
ServerSocket server = new ServerSocket(80);
注意,在选择端口时,必须小心。每一个端口提供一种特定的服务,只有给出正确的端口,才能获得相应的服务。0~1023的端口号为系统所保留,例如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口号为23, 所以我们在选择端口号时,最好选择一个大于1023的数以防止发生冲突。
在创建socket时如果发生错误,将产生IOException,在程序中必须对之作出处理。所以在创建Socket或ServerSocket是必须捕获或抛出例外。
InetAddress
InetAddress类用于标识网络上的硬件资源,标识互联网协议(IP)地址。
该类没有构造方法
1 //获取本机的InetAddress实例2 InetAddress address =InetAddress.getLocalHost();3 address.getHostName();//获取计算机名4 address.getHostAddress();//获取IP地址5 byte[] bytes = address.getAddress();//获取字节数组形式的IP地址,以点分隔的四部分7 //获取其他主机的InetAddress实例8 InetAddress address2 =InetAddress.getByName("其他主机名");9 InetAddress address3 =InetAddress.getByName("IP地址");
参考博客:
http://www.cnblogs.com/rocomp/p/4790340.html
- 网络编程之Socket类和InetAddress类
- Java网络编程之IP地址和InetAddress类
- Java网络编程之IP地址和InetAddress类
- 网络编程:InetAddress类,Socket套接字的使用
- Java网络编程---InetAddress类
- 网络编程之InetAddress
- java网络编程: InetAddress类之创建新的InetAddress对象
- Java网络编程之获取IP地址:InetAddress类
- java入门教程-12.1Java网络编程之IP地址和InetAddress类
- Java网络编程——InetAddress类和URL类
- Java 网络编程中InetAddress类的创建和使用
- Java网络编程之InetAddress
- java网络编程之InetAddress
- Java 网络编程(四) InetAddress类
- Java 网络编程(四) InetAddress类
- java中网络编程的InetAddress类
- 网络编程InetAddress类的使用
- Java 网络:InetAddress类的应用以及通过Socket实现TCP编程
- BZOJ 2286: [Sdoi2011]消耗战
- Permission denied: user=hbase, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x
- Python字典按值排序、包含字典的列表按字典值排序的方法
- 【BFS+链表】BZOJ1098 [POI2007]办公楼biu
- thinkphp 去除右下角的图标
- 网络编程之Socket类和InetAddress类
- SharePoint Framework Extensions GA Release
- kafka源码之kafkaserver的启动
- java中的位运算和两个数大小互换
- c# 没有注册类别 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
- maven git自动部署脚本
- ab和xhprof·
- 去掉超链接点击时出现的虚线框(好像只有IE能识别)
- 螺旋矩阵-LintCode