Java网络编程

2018-08-02 05:53:53来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

//java.net包中提供了专门用于网络编程的类:URL、Socket、InetAddress和DatagramSocket类等

 

1.URL类

使用URL创建对象的应用程序称为客户端程序;

一个URL对象包含最基本的三个部分信息:协议、地址和资源;

//协议必须是JVM支持的协议:常见的有Http、Ftp、File协议

//地址为有效IP地址或域名

//资源可以是主机上的任何一个文件

 

构造方法:

public URL(String spec) throws MalformedURLException

参数spec如:"http://www.baidu.com",资源默认为主页;

public URL(String protocol,String host,String file) throws MalformedURLException

 

方法:

InputStream openStream()

返回一个输入流,该输入流指向URL对象所包含的资源;

 

 

2.InetAddress类

方法:

static getByName(String s)

参数s为一个域名或IP地址,获得一个含有主机地址域名和IP地址的InetAddress对象;

//包含的信息格式:www.sina.com.cn/202.108.37.40

public String getHostName()

获取InetAddress对象所含的域名;

public String getHostAddress()

获取InetAddress对象所含的IP地址;

static getLocalHost()

获得一个含有本地机器域名和IP地址的InetAddress对象;

 

 

3.套接字(基于TCP通讯)
①客户端套接字(Socket类)

构造方法:

Socket(String host,int port) throws IOException

 

Socket类对象方法:

getInputStream()

获得一个输入流;//该输入流的源和服务器端的一个输出流的目的地相同

getOutputStream()

获得一个输出流;//该输出流的目的地和服务器端的一个输入流的源相同

getInetAddress()

客户端套接字对象调用:返回一个含有服务器端IP地址和域名的InetAddress对象;

 

②服务器端套接字(ServerSocket类)

构造方法:

ServerSocket(int port) throws IOException

端口被占用会发生异常;

 

ServerSocket类对象方法:

Socket accept() throws SocketTimeoutException

将客户端的套接字和服务器端的套接字连接起来,返回一个相连接的Socket对象(服务器端套接字对象),方法阻塞时间超过timeout触发异常;

setSoTimeout(int timeout)

设置超时值(单位:毫秒),timeout>0;

 

相连接的Socket对象方法:

getOutputStream()

获得一个指向客户端Socket对象输入流的输出流;

getInputStream()

获得一个指向客户端Socket对象输出流的输入流;

getInetAddress()

服务器端套接字对象调用:返回一个含有客户端IP地址和域名的InetAddress对象;

close()

关闭套接字连接;

客户端:
Socket mysocket;
DataInputStream in=null;
DataOutputStream out=null;
try{
    mysocket=new Socket("127.0.0.1",2010);
    in=new DataInputStream(mysocket.getInputStream());
    out=new DataOutputStream(mysocket.getOutputStream());
}
catch(Exception e){}

服务器端:
ServerSocket serverForClient=null;
Socket sc=null;
DataInputStream in=null;
DataOutputStream out=null;
try{
    serverForClient=new ServerSocket(2010);
}
catch(IOException e){}
try{
    sc=serverForClient.accept();
    in=new DataInputStream(sc.getInputStream());
    out=new DataOutpurStream(sc.getOutputStream());
}
catch(Exception e){}

 

③使用多线程技术实现套接字

(1)先用不带参数的Socket构造方法创建一个套接字;

(2)该套接字调用public void connect(SocketAddress endpoint) throws IOException请求和参数SocketAddress指定地址的服务器端的套接字连接;

        //InetSocketAddress构造方法:InetSocketAddress(InetAddress addr,int port)

 

4.UDP数据报(基于UDP通讯)

//基于UDP的通信和基于TCP的通信不同,基于UDP的信息传递更快,但不提供可靠性保证。

//UDP通信的基本模式是:将数据打包进行发送和接收

(1)发送数据包(数据包的长度不要超过8192KB)

 

①用DatagramPacket类打包数据:

构造方法:

DatagramPacket(byte data[],int length,InetAddress,int port)

DatagramPacket(byte data[],int offset,int length,InetAddress,int port)

方法:

public int getPort()

获取该数据包目标端口;

public InetAddress getAddress()

获取该数据包的目标地址;

public byte[] getData()

返回数据包中的字节数组;

 

②用DatagramSocket类发送数据包:

构造方法:

DatagramSocket()

方法:

send(DatagramPacket data_pack)

 

(2)接收数据包

①用DatagramPacket类创建一个用于接收的数据包:

构造方法:

DatagramPack(byte data[],int length)

方法:

getPort()

获取所接收包的始发端口号;

getLength()

获取收到的数据的字节长度;

InetAddress getAddress()

获取包的始发地址;

 

②用DatagramSocket类接收数据包:

构造方法:

DatagramSocket(int port);

port端口必须和待接收的数据包的端口号相同;

方法:

receive(DatagramPacket pack)

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:动态从数据库获取数据,省市县三级联动,有校验,导出Excel模板

下一篇:java自学 day3