网络编程

 

 

网络通讯3要素:

    1、IP地址,网络中计算机的数字标识。本地回环地址:127.0.0.1,本地主机名:localhost。

    2、端口,用于标识不同的进程。端口的取值范围:0~65535,其中0~1024已被系统使用或保留。

    3、协议,通讯规则。常见协议:UDP协议、TCP协议。

 

对IP地址的描述:java.net.InetAddress

    常用方法:

 

static InetAddress getLocalHost()               // 获取本地主机
static InetAddress getByName(String host)       // 通过主机名获取主机
static InetAddress[] getAllByName(String host)  // 获取主机列表
static InetAddress getByAddress(String host)    // 通过主机名获取主机
static InetAddress getByAddress(byte[] addr)    // 通过地址获取主机
static InetAddress getByAddress(String host,byte[] addr)
 

 

 

UDP与TCP

UDP:

    面向无连接,无需连接,不可靠协议,速度快

    将数据、源和目的封装成不超过64KB的包

    具体应用:视频会议、聊天

TCP:

    必须建立连接,形成数据传输通道

    通过3次握手完成连接,可靠连接

    无需封包,进行大数据量传输

    具体应用:下载

    

Socket编程

    在两个Socket之间通过IO进行通信。

    

封装了UDP的Socket:DatagramSocket

UDP的发送:

 

DatagramSocket ds =     // 建立Socket,指定监听端口,若不指定端口由系统分配
        new DatagramSocket(port);
DatagramPacket dp =     // 将数据封装成DatagramSocket对象用于发送
        new DatagramPacket(
        data[],         // 需要发送的数据
        data.length,    // 数据长度
        InetAddress,    // 目的主机
        port);          // 目的端口
        
ds.send(dp);            // 发送数据
ds.close();             // 关闭资源
 

 

 

UDP的接收:

 

DatagramSocket ds =     // 建立Socket,指定监听端口,若不指定端口由系统分配
        new DatagramSocket(port);
        
DatagramPacket dp =     // 新建一个数据包用于存放接收到的数据
        new DatagramPacket(
        data[],
        data.length);
        
ds.receive(dp);         // 接收数据

                        // 通过DatagramPacket对象取出数据
String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();
byte[] data = dp.getData();
int len = dp.getDataLength();

ds.close();             // 关闭资源
 

 

    

TCP的传输:Socket和ServerSocket

 

TCP传输的两端:

    一个客户端,与Socket对象对应;

    一个服务端,与ServerSocket对应;

    Socket内部封装了两个流对象(称为Socket流),用这两个流对象可以实现客户端与服务端的通信。

    

TCP客户端:

 

Socket s =// 创建Socket服务,指定要连接的目标主机和端口
    new Socket(InetAddress, port);
    
OutputStream out =
    s.getOutputStream();    // 获取Socket输出流,并向服务端发送信息
out.write("hello".getBytes());

InputStream in =
    s.getInputStream();     // 获取Socket输入流,接受来自服务端的信息
in.read(data[]);

s.close();// 关闭资源
 

 

 

TCP服务端:

 

ServerSocket ss             // 建立ServerSocket服务,并监听指定端口
    new ServerSocket(port);
    
Socket s = ss.accept();     // 接受客户端的连接请求,并获得客户端对象

InputStream in =
    s.getInputStream();     // 利用客户端的 输入流 获取客户端用 输出流 发来的数据
in.read(data[]);

PrintWriter out =           // 利用客户端的 输出流 向客户端发送数据
    new PrintWriter(s.getOutputStream(), true);
out.println(data);

s.close();      
ss.close();     // 可选操作。先关闭客户端,再关闭服务端
 

 

 

URL,统一资源定位符

 

URL的格式:

    <协议名>://<资源名>

    其中资源名的组成分为:

    <authority>[:<port>]/<path>[?<query>[#fragment]]

    authority;主机名或IP地址

    port:端口,可选

    path:路径,用/分隔

    query:标示查询

    fragment:资源中的信息片段

 

    常用方法:

URL url =       // 通过字符串创建URL对象

    new URL("http://orsoul.iteye.com/blog/2186558");

    常用方法:

String getProtocol());  // 获取协议名
String getHost()        // 获取主机名
String getPort()        //  若没有写端口,则返回-1
String getPath()        // 获取路径
String getFile()        // 获取文件名
String getQuery()       // 获取查询部分
URLConnection openConnection()  // 打开链接,并返回此链接对象

 

 

URLConnection

    此类表示程序与URL之间的通信链接。

    

 

URL url =                   // 通过字符串创建URL对象
    new URL("http://orsoul.iteye.com/blog/2186558");
    
URLConnection conn =
    url.openConnection();   // 用过url获得链接

BufferedReader in =         // 获取输入流用于读取网页上的内容
    new BufferedReader(new InputStreamReader(conn.getInputStream()));
    
String line;
while (null != (line=in.readLine())) {
    System.out.println(line);
}
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值