Java面向网络编程序

Java面向网络编程

InetAdderss类,该类用于封装一个IP地址,并提供了一系列与IP地址相关的方法

UDP

UDP发送数据
  • 使用UDP协议发送数据
    • 创建发送端Socket对象
    • 创建数据并打包
    • 发送数据
    • 释放资源
  • DatagramSocket:
    • 此类表示用来发送和接收数据,基于UDP协议的
  • DatagramSocket() :
    • 创建Socket对象并随机分配端口号
  • DatagramSocket(int port) :
    • 创建Socket对象并指定端口号
    //创建发送端Socket对象
    DatagramSocket ds = new DatagramSocket();
    //创建数据并打包
    /*
     * DatagramPacket :此类表示数据报包
    * 数据 byte[] 
    * 设备的地址 ip
    * 进程的地址  端口号
    DatagramPacket(byte[] buf, int length,InetAddress address, int port) 
    */
    //待发送数据
    String s = "hello udp,im comming!";
    //缓冲区
    byte[] bys = s.getBytes();
    int length = bys.length;
    InetAddress address = InetAddress.getLocalHost();//发送给当前设备
	int port = 8888;
	//打包
	DatagramPacket dp = new DatagramPacket(bys,length,address,port);
	//发送数据
	ds.send(dp);
	//释放资源
	ds.close();

UDP接收数据
  • 使用UDP协议接收数据
    • 创建接收端Socket对象
    • 接收数据
    • 解析数据
    • 输出数据
    • 释放资源
	//创建接收端Socket对象
	DatagramSocket ds = new DatagramSocket(8888);
	//接收数据
	//DatagramPacket(byte[] buf, int length) 
	byte[] bys = new byte[1024];
	DatagramPacket dp = new DatagramPacket(bys,bys.length);
	
	ds.receive(dp);//阻塞等待接受数据
		
	//解析数据
	//InetAddress getAddress() : 获取发送端的IP对象
	InetAddress address = dp.getAddress();
	//byte[] getData()  :获取接收到的数据,也可以直接使用创建包对象时的数组
	byte[] data = dp.getData();
	//int getLength()  :获取具体收到数据的长度
	int length = dp.getLength();
		
	//输出数据
	System.out.println("sender ---> " + address.getHostAddress());
	//System.out.println(new String(data,0,length));
	System.out.println(new String(bys,0,length));
	//释放资源
	ds.close();

TCP

ServerSocket对象负责监听某台计算机的某个端口号,在创建ServerSocket对象后,需要继续调用该对象的accept()方法,接收来自客户端的请求。当执行了accept()方法之后,服务器端程序会发生阻塞,直到客户端发出连接请求,accept()方法才会返回一个Scoket对象用于和客户端实现通信,程序才能继续向下执行。

TCP发送数据
  • 使用TCP协议发送数据
Socket(InetAddress address, int port) 
  • 创建发送端Socket对象(创建连接)
Socket s = new Socket(InetAddressInetAddress.getLocalHost(),10086);
  • 获取输出流对象
OutputStream os = s.getOutputStream();
  • 发送数据
String str = "hello tcp,im comming!!!";
os.write(str.getBytes());//write(byte[])
  • 释放资源
TCP接收数据
服务端:ServerSocket
接收端:Socket
ServerSocket(int port) 
ServerSocket accept() 
  • 创建接收端Socket对象
ServerSocket ss = new ServerSocket(10086);
  • 监听(阻塞)
Socket s = ss.accept();
  • 获取输入流对象
InputStream is = s.getInputStream();
  • 获取数据
byte[] bys = new byte[1024];
int len;//用于存储读到的字节个数
len = is.read(bys);
  • 输出数据
InetAddress address = s.getInetAddress();
System.out.println("client ---> " + address.getHostName());
System.out.println(new String(bys,0,len));
  • 释放资源
s.close();
//ss.close();//服务端一般不用关闭

TCP特点

  • 服务端不能主动向客户端发送信息,当客户端向服务端发送信息后,服务端可以向客户端发送信息。
按行发送
//创建客户端Socket对象
Socket s = new Socket("itheima",8888);
//获取输出流对象
PrintWriter out = new PrintWriter(s.getOutputStream(),true);//true表示开启自动换行
//写出数据
out.println("数据");
按行读取
//获取输入流对象
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String s = br.readLine();
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值