您的位置:首页 > 理论基础 > 计算机网络

JAVA基础之网络编程

2014-01-19 14:11 197 查看
        网络编程就是在多个设备之间传输数据~

1.网络协议

⑴ip协议

IP是Internet Protocol的简称。ip地址其实就是每台主机在网络上的标识。目前有两种表现形式:IPv4(四个字节表示)、IPv6(16个字节表示)

在java.net里有InetAddress类

部分使用例子如下:

InetAddress a1=InetAddress.getByName("192.168.1.2");//创建对象
System.out.println(a1.getHostName());//获取此ip地址的主机名


本地回环地址:127.0.0.1

⑵TCP与UDP协议

TCP:在发送数据前,需要确定对方已在线并做好接收准备,形成好传输数据的通道(通过三次握手完成确认连接好),所以它是可靠的协议,缺点是速度会变慢。

UDP:是发送数据前不需要建立连接,面向的是无连接-就是说,在发送数据前并不需要确定对方是否在线,直接发过去,如果不在线就会丢包,所以是不可靠的协议,但是它的优点在于速度快。注意它发送的数据包大小限制在64k以下。

2.套接字与端口

 ⑴端口(port)

       就是用于标识进程的逻辑地址,不同进程的标识。

有效的端口号:0--65535,其中0--1024是系统使用或保留的端口

⑵套接字(Socket)

      就是用于将应用程序与端口连接起来,相当于插插头的插座。

在java中为套接字弄成了一个类,下面会讲到。

3.UDP之DatagramPacket类、DatagramSocket类

⑴UDP通信基本步骤

①发送数据包

(1)使用DatagramSocket()创建一个数据套接字。

(2)使用DatagramPacket(byte[] buf,int length,InetAddress address,int port)创建要发送的数据包。

(3)使用DatagramSocket()类的send()方法发送数据包。

②接收数据包

(1)使用DatagramSocket(int port)创建数据包套接字,绑定到指定端口。

(2)使用DatagramPacket(byte[] buf,int lenght)创建自己数据来接收数据包。

(3)使用DatagramPacket类的receive()方法接收UDP包。

⑵DatagramPacket类

用来表示数据包,其构造函数有:

(1)DatagramPacket(byte[] buf,int length)。

指定了数据包的内存空间大小。

(2)DatagramPacket(byte[] buf,int length,InetAddress address,int port)。

不仅指定了数据包的内存空间大小,还指定了数据包的目标地址和端口。在发送数据时,必须指定接收方的Socket地址和端口号,所以使用这种构造函数可创建发送数据的DatagramPacket对象。

⑶DatagramSocket类

用于表示发送和接收数据包的套接字,其构造函数有:

(1)DatagramSocket()。

这种方式创建DatagramSocket对象,会将其绑定到本地主机上任何可用的端口。

(2)DatagramSocket(int port)。

这种方式创建DatagramSocket对象,会将其绑定到本地主机上指定的端口。

(3)DatagramSocket(int port,InetAddress addr)。

这种方式创建DatagramSocket对象,会将其绑定到本地主机上指定的本地地址。适用于多网卡和多IP地址的情况。

示例

import java.net.*;
class NetDemo
{
public static void main(String[] args)throws UnknownHostException
{
InetAddress ip=InetAddress.getLocalHost();//返回本地主机getLocationHost是静态方法!。
System.out.println(ip.getHostAddress());//
System.out.println(ip.getHostName());
}
}

//---------------------------------------------------------------------------------------------------------------------------------------------
class faNetDemo//这个是发送端
{
public static void main(String[] args)throws Exception
{
DatagramSocket ds =new DatagramSocket();
byte[] buf="JAVA".getBytes();
DatagramPacket dp= new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.3"),10000);
ds.send(dp);
ds.close();
}
}

//---------------------------------------------------------------------------------------------------------------------------------------------
class shouNetDemo//这个是接收端
{
public static void main(String[] args)throws Exception
{
DatagramSocket ds=new DatagramSocket(10000);
byte[] buf= new byte[1024];
DatagramPacket dp= new DatagramPacket(buf,buf.length);

ds.receive(dp);
String data=new String(dp.getData(),0,dp.getLength());
System.out.println(data);
ds.close();
}
}


结果:



4.TCP之ServerSocket类

⑴TCP程序

是指利用Socket类编写通信的程序,利用TCP协议进行通信的两个程序是有主次之分的,一个是服务器程序,另一个是客户机程序。

⑵ServerSocket类

在java.net包中是用于表示服务器套接字,主要功能是等待来自网络上的请求,它可以通过指定的端口来等待连接的套接字,其构造函数有(都抛出IOException异常):

(1)ServerSocket()。

创建非绑定服务器套接字。

(2)ServerSocket(int port)。

创建绑定到特定端口的服务器套接字。

(3)ServerSocket(int port,int backlog)。

利用指定的backlog创建服务器套接字并将其绑定到指定的本地端口号。

(4)ServerSocket(int port,int backlog,InetAddress bindAddress)。

使用指定的端口。侦听backlog和要绑定到的本地IP地址创建服务器(适用于多网卡和多个IP的情况)。

常用方法有:

1)Socket accept()

等待客户机连接,若连接,则创建一套接字

2)boolean isBound()

判断ServerSocket的绑定状态

3)InetAddress getInetAddress()

返回本地IP

4)boolean isClosed()

返回关闭状态

5)void close()

关闭

6)void bind(socketAddress endpoint)

绑定到指定地址

7)int getInetAddress()

返回服务器套接字等待的端口号
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: