黑马程序员-java学习基础加强之网络编程

---------------------- android培训java培训、期待与您交流! ----------------------

网络通讯要素:IP地址、端口号、传输协议。

IP地址:

网络中设备的标识,用于区分不同的主机,本地回环地址:127.0.0.1,主机名:localhost

端口号:

用于标识进程的逻辑地址,并非真实的物理存在,而是一个假想的连接装置。

有效端口:0~65535,其中0~1024之间的端口通常用于系统使用或作为保留端口。

传输协议:

       TCP协议,面向连接的通信协议,提供两台计算机之间可靠的数据传输,通过三次握手建立连接,形成数据传输

通道,可以进行大量数据的传输,TCP协议是可靠协议,但是连接过程会耗费时间,所以效率有点低。

      UDP协议,无连接通信协议,不保证可靠数据的传输,以独立发送数据包的形式进行,不需要建立连接,因此速

度快,但是不可靠。

InetAddress类:

InetAddress类是与IP地址相关的类,利用该类可以获取IP地址、主机名称等信息。提供以下常用方法:

getByName(String host):获取与host相对应的InetAddress对象。

getHostAddress():获取InetAddress对象所包含的IP地址。

getHostName():获取该IP地址对应的主机名。

getLocalHost():获取本地主机的InetAddress对象。

示例程序:

package com.jl.Socket.Demo;

import java.net.*;

public class IPDemo {

public static void main(String[] args) throws UnknownHostException {

       InetAddress i=InetAddress.getLocalHost();

       System.out.println(i.toString());

       System.out.println(“IPAddress--->”i.getHostAddress());

       System.out.println(“Name--->”i.getHostName());

    }

}

运行结果为:

ykz-20090723PYK/169.254.25.142

IPAddress--->169.254.25.142

Name--->ykz-20090723PYK

TCP传输

TCP传输的步骤:

客户端:

1、  建立Socket服务,指定要连接的主机和端口。

2、  获取Socket输出流,将数据写到该流中,通过网络发送给服务端。

3、  获取Socket输入流,从该流中读取服务端反馈的信息。

4、  关闭客户端资源。

服务器端:

1、  建立ServerSocket服务,指定端口。

2、  获取连接的客户端对象。

3、  获取Socket输入流,从该流中读取客户端发送过来的数据。

4、  获取Socket输出流,将服务器端的反馈信息写入该流中,通过网络发送给客户端。

5、  关闭服务器端资源。

示例代码:

TcpClient类作为客户端

import java.io.*;

import java.net.*;

class  TcpClient

{

    public static void main(String[] args) throws Exception

    {

       //建立Socket服务,指定目的主机和端口

       Socket s=new Socket("127.0.0.1",10005);

       //获取socket流的输出流,将数据写到该流中,并发送给服务端

       OutputStream out=s.getOutputStream();

       out.write("能收到吗?".getBytes());

       //获取socket流中的输入流,从该留中读取服务端的反馈信息,并打印。

       InputStream in=s.getInputStream();

       byte [] buf=new byte[1024];

       int len=in.read(buf);

       System.out.println(new String(buf,0,len));

       s.close();

    }

}

TcpServer类作为服务器端

import java.io.*;

import java.net.*;

class TcpServer

{

    public static void main(String []args) throws Exception

    {

       //创建ServerSocket服务,指定端口

       ServerSocket ss=new ServerSocket(10005);

       //获取连接的客户端对象

       Socket s=ss.accept();

       //打印客户端IP

       String ip=s.getInetAddress().getHostAddress();

       System.out.println(ip+"....connected");

       Thread.sleep(3000);

       //获取socket流的输入流,获取客户端发送过来的数据

       InputStream in=s.getInputStream();

       byte [] buf=new byte[1024];

       int len=in.read(buf);

       System.out.println(new String(buf,0,len));

       //获取socket流的输出流,将服务端的反馈信息写到该流中,发送给客户端

       OutputStream out=s.getOutputStream();

       Thread.sleep(3000);

       out.write("哥们收到了!".getBytes());

    }

}

UDP传输

UDP传输的步骤:

发送数据包:

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

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

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

4、  关闭资源。

接收数据包:

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

2、  使用DatagramPacket(byte [] buf, int length)创建字节数据来接收数据包。

3、  使用DatagramPacket类的receive()方法接收数据包。

4、  关闭资源。

示例代码:

Sender类用来发送UDP数据包。

class Sender{

    public static void main(String []args)throws Exception{

       //创建数据包套接字

       DatagramSocket ds=new DatagramSocket();

       byte [] buf="JiangLiang".getBytes();

       InetAddress ia= InetAddress.getByName("127.0.0.1");

       //创建要发送的数据包

       DatagramPacket dp=new DatagramPacket(buf,buf.length,ia,10000);

       //发送数据包

ds.send(dp);

       ds.close();

    }

}

Receiver类用来接收UDP数据包。

class Receiver{

    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 ip=dp.getAddress().getHostAddress();

       String data=new String(dp.getData(),0,dp.getLength());

       int port=dp.getPort();

       System.out.println(ip+"::"+data+"::"+port);

       ds.close();

    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值