网络编程的三要素
IP地址
- 概念:IP地址是网络中计算机的唯一标识
IP的组成:网络号+主机号
java提供了InetAddress类来对IP地址解析和操作
确定主机名称的IP地址
public static InetAddress getByName(String host)
获取此IP地址的主机名
public String getHostName()
端口
- 端口是正在运行程序的标识
协议
UDP
将数据源和目的地封装在数据包中,无连接,是不可靠协议,不需要建立连接,速度快TCP
建立连接,形成传输数据的通道,在连接中进行大数据量的传输,通过三次握手完成连接,是可靠地,效率会低
Socket网络编程
Socket包含了IP地址和端口号
Socket原理机制:通信的两端都有Socket,网络通信其实是Socket间的通信,数据在两个Socket间通过IO传输
UDP
UDP使用DatagramSocket类用于发送和接收数据报数据包
构造方法:
public DatagramSocket()
—发送数据使用的构造方法public DatagramSocket(int port)
—接收数据使用的构造方法
主要成员方法:public void close()
关闭此数据报套接字public void send(DatagramPacket p)
从此套接字发送数据报包public void receive(DatagramPacket p)
从此套接字接收数据报包
发送和接收的数据是DatagramPacket类的,该类表示数据报包,send方法中需要传递DatagramPacket对象
构造方法:
public DatagramPacket(byte[] buf,int length,InetAddress address,int port)
–发送数据使用的构造方法public DatagramPacket(byte[] buf,int length)
–接收数据使用的构造方法
buf - 分组数据
length - 包长度
address - 目的地址
port - 目的端口号
主要成员方法:public byte[] getData()
返回数据缓冲区public int getLength()
返回要发送的数据的长度或接收到的数据的长度public InetAddress getAddress()
返回该数据报发送或接收数据报的计算机的IP地址
UDP协议发送数据
1.创建发送端Socket对象
2.创建数据并打包
3.调用Socket对象的发送方法发送数据
4.释放资源
下面为实现UDP协议发送数据
public class send{ public static void main(String[] args){ //创建发送端Socket DatagramSocket ds=new DatagramSocket(); //创建数据并打包 byte[] bys="UDP协议发送的数据".getBytes(); int length=bys.length; //发送数据的目的IP地址 InetAddress address=InetAddress.getByName("主机名"); //发送端计算机的端口 int port=10086; DatagramPacket dp=new DatagramPacket(bys,length,address,port); //发送数据 ds.send(dp); //释放资源 ds.close(); } }
UDP协议接收数据
1.创建接收端Socket
2.创建数据包接收数据(接受容器)
3.用Socket接受方法接收数据
4.解析数据输出
5.释放资源
下面为实现UDP协议接收数据
public class Receive { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub //创建接收端Socket DatagramSocket ds=new DatagramSocket(10086); //创建数据包接收 byte[] bys=new byte[1024]; int length=bys.length; DatagramPacket dp=new DatagramPacket(bys,length); //接收数据 ds.receive(dp); //解析数据 InetAddress address=dp.getAddress(); String ip=address.getHostAddress(); byte[] bys2=dp.getData(); int len=dp.getLength(); String s=new String(bys2,0,len); System.out.println(ip+":"+s); //释放资源 ds.close(); } }
TCP
TCP协议发送数据 (客户端)
1.创建发送端Socket
2.获取输出流写数据
3.释放资源
TCP发送客户端使用的是Socket类
构造方法:
public Socket(InetAddress address,int port)
public Socket(String host,int port)
主要成员方法:public void close()
关闭public OutputStream getOutputStream()
返回此套接字的输出流
public class TSend { public static void main(String[] args) throws IOException { //创建Socket Socket s=new Socket("daw-PC",10086); //获取输出流写数据 OutputStream os=s.getOutputStream(); os.write("TCP发送数据".getBytes()); //释放资源 s.close(); } }
TCP协议接收数据(服务器)
1.创建接收端Socket
2.监听客户端连接,返回对应的Socket对象
3.获取输入流读数据
4.释放资源
TCP接收客户端使用的是ServeSocket类
构造方法:
public ServerSocket(int port)
成员方法:public Socket accept()
监听 ,返回的是Scoket类,所以需要Socket类的方法
Socket类的—public InputStream getInputStream()
返回此套接字的输入流
public class TReceive { public static void main(String[] args) throws IOException { //创建接收端Socket ServerSocket ss=new ServerSocket(10086); //监听客户端 Socket s=ss.accept(); //获取输入流写数据 InputStream is=s.getInputStream(); byte[] bys=new byte[1024]; int len=is.read(bys); String str=new String(bys,0,len); System.out.println(str); //释放资源,注意不关闭服务器 s.close(); } }