java中封装了大量的socket API,为编写网络通信程序提供了极大的方便。
在计算机网络的学习中,大家都已熟练掌握了TCP/UDP的基本原理,在此不在赘述。仅给出接收端和发送端的源代码,供大家讨论和批评。
发送端代码如下:
//只要稍加改进,即可发送数据
import java.io.*.
import java.lang.*.
import java.net.*.
public class uclient
{
private DatagramSocket cli.
private DatagramPacket pac.
private byte sb[].
private String sen.
public uclient()
{
Init().
}
public void Init()
{
try
{
//指定端口号,避免与其他应用程序发生冲突
cli=new DatagramSocket(10002).
sb=new byte[1024].
sen="UDP方式发送数据".
sb=sen.getBytes().
pac=new DatagramPacket(sb,sb.length,InetAddress.getByName("localhost"),10005).
cli.send(pac).
}
catch(SocketException se)
{
se.printStackTrace().
}
catch(IOException ie)
{
ie.printStackTrace().
}
}
public static void main(String args[])
{
new uclient().
}
}
接收端数据:
//加以改进代码,可以改变接收方式
import java.io.*.
import java.lang.*.
import java.net.*.
public class userve
{
private DatagramSocket ser.
private DatagramPacket pac.
private byte rb[].
private String rev.
public userve()
{
Init().
}
public void Init()
{
try
{
ser=new DatagramSocket(10005).
rb=new byte[1024].
pac=new DatagramPacket(rb,rb.length).
rev="".
int i=0.
while(i==0)//无数据,则循环
{
ser.receive(pac).
i=pac.getLength().
//接收数据
if(i>0)
{
//指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点
rev=new String(rb,0,pac.getLength()).
System.out.println(rev).
i=0.//循环接收
}
}
}
catch(Exception e)
{
e.printStackTrace().
}
}
public static void main(String args[])
{
new userve().
}
}