|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
java比较简单,没有C++的烦琐,但学习时最好有C++为基础.与JSP和SQL起应用,功能强大.
在Java中举行收集编程是绝对简单的,由于J2SE中的java.net包已对各类通讯协定很好的举行了封装,本文次要报告怎样基于UDP(用户数据报)协定编写使用程序。
一般我们举行收集编程一样平常都是利用基于socket的TCP/IP编程,究竟TCP/IP使用十分的普遍,好比我们扫瞄互联网就是基于HTTP协定、我们发送邮件是经由过程SMTP协定。它们都是基于TCP/IP的。TCP/IP的传输最主要的是它能够包管数据抵达目标地,而UDP则分歧他其实不包管正确的传输,数占有大概丧失。假如有乐趣的话,读者能够参考《盘算机收集》一书。
在先容UDP编程之前有需要先容一个主要的类InetAddress,用最复杂的一句话形貌这个类的感化就是:它代表了一个IP地点。这十分主要在互联网中假如晓得了IP地点则意味着我们晓得了通讯的端点。这个类没有机关器可是有几个工场办法,经由过程传送分歧的参数比方IP,Hostname等来失掉一个InetAddress的实例,上面的这个小例子能够失掉我呆板的IP地点。
importjava.net.*;
publicclassTestNet
{
publicstaticvoidmain(String[]args)throwsException
{
InetAddressia=InetAddress.getByName("compaq");
StringipAdr=ia.getHostAddress();
System.out.println(ipAdr);
}
}
固然我的呆板的名字为compaq,假如你传进localhost的话将会失掉127.0.0.1。
接上去入手下手报告怎样利用UDP编程,这十分简单了解,我们应当起首机关一个数据报,然后把它发送进来,同时我们也能够吸收数据报。在java中供应了DatagramPacket和DatagramSocket两个类来完成如许的义务,前者卖力机关数据报后者卖力发送和吸收。看看DatagramPacket的机关器
DatagramPacket(byte[]buf,intlength,InetAddressaddress,intport)
DatagramPacket(byte[]buf,intoffset,intlength,InetAddressaddress,intport)
DatagramPacket(byte[]buf,intoffset,intlength,SocketAddressaddress)
DatagramPacket(byte[]buf,intlength,SocketAddressaddress)
DatagramPacket(byte[]buf,intlength)
DatagramPacket(byte[]buf,intoffset,intlength)
个中后面四个是为机关发送的数据报而用的,由于他们有InetAddress大概SocketInetAddress作为吸收端点的地点,前面一个则是为了承受数据报用的。
一样我们编写一个C/S模子的例子来讲明怎样利用这两个主要的类,假如对API还不熟习请参考Javadoc。上面的程序在本机机关一个工夫服务器,客户端来获得工夫。之前已经写过相似的工夫服务器程序,不外这个是基于UDP的编程。
importjava.io.*;
importjava.net.*;
importjava.util.*;
publicclassTimeServer{
finalprivatestaticintDAYTIME_PORT=13;
publicstaticvoidmain(Stringargs[])throws
IOException{
DatagramSocketsocket=newDatagramSocket(DAYTIME_PORT);
while(true){
bytebuffer[]=newbyte[256];
DatagramPacketpacket=newDatagramPacket(buffer,buffer.length);
socket.receive(packet);
Stringdate=newDate().toString();
buffer=date.getBytes();
//Getresponseaddress/port
//forclientfrompacket
InetAddressaddress=packet.getAddress();
intport=packet.getPort();
packet=newDatagramPacket(buffer,buffer.length,address,port);
socket.send(packet);
}
}
}
importjava.io.*;
importjava.net.*;
publicclassGetTime{
finalprivatestaticintDAYTIME_PORT=13;
publicstaticvoidmain(Stringargs[])throws
IOException{
if(args.length==0){
System.err.println("Pleasespecifydaytimehost");
System.exit(-1);
}
Stringhost=args[0];
bytemessage[]=newbyte[256];
InetAddressaddress=InetAddress.getByName(host);
System.out.println("Checkingat:"+address);
DatagramPacketpacket=newDatagramPacket(message,message.length,
address,DAYTIME_PORT);
DatagramSocketsocket=newDatagramSocket();
socket.send(packet);
packet=newDatagramPacket(message,message.length);
socket.receive(packet);
Stringtime=newString(packet.getData());
System.out.println(Thetimeat"+host+"is:"+time);
socket.close();
}
}
C#是盗用了Java的源代码,仿照开发的,原因是Java是开源的啊,盗了也白盗,还有一点,开发C#语言的团队是就是开发Java语言的团队,是微软重金挖过去的啊 |
|