您的位置:首页 > 编程语言 > Java开发

java中的UDP简单编程

2006-06-12 19:24 537 查看
java中的UDP,也是十分有用的,比如可以用其编个简单的二人聊天程序,最近学习这方面知识,现摘录着。我们可以使用datagrampacket类和datagramsocket类,datagramsocket类用来创建接收和发送UDP的SOCKET实例,而datagrampacket类则是用于处理报文,将byter数组,目标地址,目标端口等数据包装成报文或者将报文拆成BYTE数组。

下面给出简单的代码段
int portIn = 5000;//输入端口
int portOut = 5001;//输出端口

DatagramPacket sendpacket,receivepacket;//声明发送和接收数据包
DatagramSocket sendsocket,receivesocket;//声明发送和接收DatagramSocket

初始化:
try {
sendsocket=new DatagramSocket(5001);//实例化DatagramSocket类作为输出端
receivesocket=new DatagramSocket(5000);//实例化DatagramSocket类作为输入端
online = !(sendsocket.isClosed());
}
catch(SocketException se){//异常捕获
se.printStackTrace() ;
System.exit(0);
}
}

之后,输入对方IP地址,并且连接对方,其核心代码为
portIn = (int) Integer.parseInt(str2);
portOut = (int) Integer.parseInt(str3);


if(online){
sendsocket.close();
receivesocket.close();
textArea1.append("/n formal connection closed");
}

try {
textArea1.append("/n building a connection use the port defined...");
sendsocket=new DatagramSocket(portOut);
receivesocket=new DatagramSocket(portIn);
textArea1.append("/n connection builded.");
}
catch(SocketException se){
se.printStackTrace() ;
System.exit(0);
}
online = !(sendsocket.isClosed());
}


else
textArea1.append("/nplease input ports and IP");

}

上面的代码,首先判断,如果没有获得连接,则提示用户,通过online属性来判断系统当前的状态,如果已经连接,则断开连接,然后再建立新的连接,否则直接建立连接。

而监听接受的信息方法为
public void waitforpackets(){//检测并接受对方发来的消息
while(true){
try{
byte[]array=new byte[100];
receivepacket=new DatagramPacket(array,array.length );
receivesocket.receive(receivepacket);//接收
textArea1.append("/nfrom "+receivepacket.getAddress() +":"+receivepacket.getPort()+" get:");
byte data[]=receivepacket.getData() ;
String received=new String(data,0);
textArea1.append(received);
}
catch (IOException se){
se.printStackTrace() ;
}
}
}

DatagrmPacket类的最重要的方法是getdata(),从接收包中取得报文的byte数组编码,然后通过调用receivesocket的receive函数接受消息,然后将接收的报文保存。

而发送的代码为
String str=textField2.getText();
if(online){
if(str.compareTo("")!=0 ){


try {


textArea1.append("/nto "+textField2.getText() +":"+portOut+" say: "+textField1.getText() );
String s=textField1.getText() ;
byte data[]=new byte[100];
s.getBytes(0,s.length() ,data,0);
sendpacket=new DatagramPacket(data,s.length() ,InetAddress.getByName(textField2.getText()),portOut);
sendsocket.send(sendpacket);
}
catch(IOException exc){
exc.printStackTrace() ;
}

DatagramPacket的实例化中,这里的格式是DatagramPacket(byte[] buf,int length,InetAddress addr,int port),从 buf数组取出长度为length长度的数据创建数据包对象,目标是addr地址,port端口
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: