JAVA网络编程 UDP 初学者进

来源:互联网 发布:c语言字符数组赋值 编辑:程序博客网 时间:2024/05/07 01:05

java网络编程 初学者进

对于网络编程,首先你要了解网络基础知识,我先介绍几个,就不详细介绍了

通信协议:计算机网络中实现通信必须有一些约定,即通信协议。对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。
TCP协议:提供可靠的数据传输服务的规则。
IP协议进行IP数据包的分割和组装。
IP地址:为实现网络中不同的计算机之间的通信,在网络中的每台机器都必须有一个与众不同的标识,这就是IP地址(IP Address)。
端口:一个16位的整数,用于表示数据交给哪个通信程序处理。

 OSI模型
 →→→→→→
↓应  用  层    ↓
 →→→→→→
↓表  示  层    ↓
 →→→→→→
↓会  话  层    ↓
 →→→→→→
↓传  输  层    ↓→→→→→TCP
 →→→→→→
↓网  络  层    ↓→→→→→IP
 →→→→→→
↓数据链路层 ↓
 →→→→→→
↓物  理  层    ↓
 →→→→→→
JDK中为开发网络应用程序提供了java.net包,该包下的类和接口几乎都是为网络编程服务的。


InetAddress:用于描述IP地址的对象
有2个静态变方法获取InetAddress实例
getByName(String host):根据主机获取对应的InetAddress
getByAddress(byte[] addr):根据原始IP来获取InetAddress

●先来说下UDP   比如聊天用的ICQ和OICQ就是使用的UDP协议。 
使用位于JDK中Java.net包下的DatagramSocket可以非常方便地控制用户数据报文。
DatagramSocket类:创建接收和发送UDP的Socket实例。
DatagramSocket():创建实例。通常用于客户端编程,它并没有特定监听的端口,仅仅使用一个临时的。
DatagramSocket(int port):创建实例,并固定监听Port端口的报文。
receive(DatagramPacket d):接收数据报文到d中。receive方法产生一个“阻塞”。
send(DatagramPacket d):发送报文d到目的地。
close():关闭DatagramSocket。在应用程序退出的时候,通常会主动释放资源,关闭Socket。

实例1,编写程序演示使用UDP协议数据报的发送和接受。
发送端
建立udpsocket服务端点。该端点建立,系统会随机分配一个端口。如果不想随机配置,可以手动指定。 DatagramSocket ds = new

DatagramSocket(9002);
将数据进行packet包的封装,必须要指定目的地地址和端口。 byte[] buf = "wo shi shu ju".getBytes(); DatagramPacket dp =new

DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.254"),9001);
通过socket服务的send方法将该包发出。 ds.send(dp);
将socket服务关闭。主要是关闭资源。 ds.close();

代码
package com.csdn.net;

import java.io.*;
import java.net.*;

public class SendDemo {

 /**
  * @param args
  */
 public static void main(String[] args) {
  DatagramSocket ds=null;
  try {
   ds=new DatagramSocket();
   BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
   String line=null;
   while((line=br.readLine())!=null){
    byte[] buf=line.getBytes();
    DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName

("192.168.49.66"),9009);
    ds.send(dp);
    
   }
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }finally{
   ds.close();
  }

 }

}
接收端
建立udp的socket服务。要监听一个端口。 DatagramSocket ds = new DatagramSocket(9001);
定义一个缓冲区,将该缓冲区封装到packet包中。 byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket

(buf,buf.length);
通过socket的receive方法将数据存入数据包中。 ds.receive(dp);
通过数据包dp的方法getData()、getAddress()、getPort()等方法获取包中的指定信息。
关闭socket。 ds.close();

代码
package com.hbsi.net;

import java.net.DatagramPacket;
import java.net.DatagramSocket;


//接收端
public class ReceiveDemo {

 /**
  * @param args
  */
 public static void main(String[] args) throws Exception {
  //1.建立udpsocket
  DatagramSocket ds=new DatagramSocket(9009);
  
  //2.建立一个数据包来接收数据
  byte[] buf=new byte[1024];
  
  DatagramPacket dp=new DatagramPacket(buf,buf.length);
  
  //3.接收
  ds.receive(dp);
  
  //4.通过数据包对象的方法获取数据
  String ip=dp.getAddress().getHostAddress();//get  Ip
  String data=new String(dp.getData(),0,dp.getLength());//获取收到的内容
  int port=dp.getPort();//get端口
  System.out.println(ip+":"+data+":"+port);
  
  //5关闭
  ds.close();
  

 }

 

 

 

原创粉丝点击