网络编程基本概念:
网络通信要素
地址:与网络上哪台计算机通信
端口:与计算机上的哪个网络应用程序通信
协议:采用什么规则进行通信
JAVA的网络编程方法:
Java.net的包提供相应的类与方法
地址:获得要通信的网络计算机地址
代表IP地址的InetAddress类
端口:获得要通信网络应用程序
0-65535的端口号,1024以下的保留
协议:采用某种确认的通信规则
TCP:ServerSocket/Scoket
UDP:DatagramSocket
IP地址:
IP网络中每台主机都必须有一个惟一的IP地址;
IP地址是一个逻辑地址;
因特网上的IP地址具有全球唯一性;
32位,4个字节,常用点分十进制的格式表示,例如:192.168.0.16
Java.net包中提供一个InetAddress类表示IP地址
InetAddress对象:
用途:获得要通信的对象的IP地址.
说明: InetAddress类提供了域名解析和反解析功能
InetAddress类没有构造函数,但拥有一 些能够返回 InetAddress对象的static的方法
getLocalHost():返回本地主机的IP地址
getByName(String host):返回host主机的IP地址
getByAddress(byte[] addr):返回addr主机的IP地址, addr数组元素的值是未经处理的4组数字(-127~128).
以上都是静态方法,返回值为InetAddress对象,且都要抛出异常throws UnknownHostException
<span style="font-size:18px;">import java.net.*;
public class IntAdd01
{
public static void main(String[] args) throws UnknownHostException
{
InetAddress IP1=InetAddress.getLocalHost();
System.out.println("IP1==>"+IP1);
System.out.println("==============================");
InetAddress IP2=InetAddress.getByName("www.zwu.edu.cn");
System.out.println("IP2==>"+IP2);
System.out.println("==============================");
InetAddress IP3=InetAddress.getByName("10.60.60.41");
System.out.println("IP3==>"+IP3);
System.out.println("==============================");
InetAddress IP4=InetAddress.getByAddress (new
byte[]{(byte)216,(byte)239,(byte)53,(byte)101});
System.out.println("IP4==>"+IP4);
System.out.println("==============================");
InetAddress[] IPGroup=InetAddress.getAllByName("www.yahoo.com");
System.out.println("输出IPGroup:");
for(int i=0;i<IPGroup.length;i++)
{
System.out.println(IPGroup[i]);
}
}
}
</span>
端口:
端口用一个整数型标识符来表示,即端口号。端口号跟协议相关,TCP/IP传输层的两个协议TCP和UDP是完全独立的
两个软件模块,因此各自的端口号也相互独立,端口通常称为协议端口(protocol port) ,简称端口。
端口使用一个16位的数字来表示,它的范围是0~65535,1024以下的端口号保留给预定义的服务。例如:http使用80
端口。
TCP协议的实现方法:
协议:为进行网络中的数据交换(通信)而建立的规则、标准或约定。(=语义+语法+规则)
TCP/IP已成为Internet上通信的工业标准。
TCP/IP模型包括4个层次:
应用层:SMTP\POP3\FTP\Telnet\Http
传输层: TCP\UDP
网络层:IP\ICMP\IGMP
网络接口
出了一种应用程序访问通信协议的操作系统调用socket(套接字)。socket的出现,使程序员可以很方便地访问TCP/IP,
从而开发各种网络应用的程序。
随着Unix的应用推广,套接字在编写网络软件中得到了极大的普及。后来,套接字又被引进了Windows 等操作系统
中。Java语言也引入了套接被引进了Windows 等操作系统中。Java语言也引入了套接字编程模型。
TCP协议Socket:
Socket类
ServerSocket类
TCP协议是一个面向连接的可靠性传输协议,在发送数据之前,先要发出连接请求,当对方监听到有请求来到时就建立连
接,然后双方就可以收发消息,发送完信息后,双方就断开连接.
发起连接请求的一方:客户端(client)
接受连接请求的一方:服务器端(Server)
客户端的Socket类构造方法:
Socket():
Socket(InetAddress add,int port):
Socket(String host, int port):
Socket(InetAddress add,int port,InetAddress Localadd,int localport):
Socket(String host, int port ,InetAddress Localadd,int localport):
客户端的Socket类常用方法:
IntAddress getInetAddress():
IntAddress getLocalAddress():
Int getPort():
Int getLocalPort():
InputStream getInputStream() throws IOException:
Outputstream getOutputStream() throws IOException :
Close() throws IOException :
String toString():
isClose():
IsConnected():
服务器端的ServerSocket类构造方法:
ServerSocket():
ServerSocket(int port):
ServerSocket(int port,int backlog)
backlog参数指定进入连接指示的最大队列长度,默认值为50,当队列已满,若有新的连接请求到来,则会拒绝.
ServerSocket(int port,int backlog,InetAddress bindAdd):
服务器端的ServerSocket类常用方法:
Socket accept();
IntAddress getInetAddress():
Int getLocalPort():
Close() throws IOException :
String toString():
isClose():
IsBound():
客户端程序编写:
①调用Socket()创建一个流套接字,并连接到服务器端;
②调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收。
③最后关闭通信套接字。
服务器程序编写:
①调用ServerSocket(int port)创建一个服务器端套接字,并绑定到指定端口上;
②调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字。
③调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收。
④最后关闭通信套接字。
服务器程序的多线程实现:
服务器往往是对多个客户端提供服务,传统的单线程的实现方式使得服务器只能响应一个客户端的请求.所以针对于服务
器,一般是以多线程的方式来实现.