Java中的TCP_UDP网络通信编程计算机等级考试
文章作者 100test 发表时间 2010:02:02 15:57:12
来源 100Test.Com百考试题网
127.0.0.1是回路地址,用于测试,相当于localhost本机地址,没有网卡,不设DNS都可以访问.
端口地址在0~65535之间,其中0~1023之间的端口是用于一些知名的网络服务和应用,用户的普通网络应用程序应该使用1024以上的端口.
网络应用中基本上都是TCP(Transmission Control Protocol传输控制协议)和UDP(User Datagram Protocol用户数据报协议),TCP是面向连接的通信协议,UDP是无连接的通信协议.
Socket连接套接字,Java分别为TCP和UDP提供了相应的类,TCP是java.net.ServerSocket(用于服务器端)和java.net.Socket(用于客户端).UDP是java.net.DatagramSocket.
1,Java编写UDP网络程序
1.1,DatagramSocket
DatagramSocket有如下构造方法:
1,DatagramSocket() :构造数据报套接字并将其绑定到本地主机上任何可用的端口。
2,DatagramSocket(int port):创建数据报套接字并将其绑定到本地主机上的指定端口。
3,DatagramSocket(int port, InetAddress laddr):创建数据报套接字,将其绑定到指定的本地地址。即指定网卡发送和接收数据.
如果在创建DatagramSocket对象时,没有指定网卡的IP 地址,在发送数据时,底层驱动程序会自动选择一块网卡去发送,在接收数据时,会接收所有的网卡收到的与端口一致的数据.
发送信息时,可以不指定端口号,接收信息时,要指定端口号,因为要接收指定的数据.
发送数据使用DatagramSocket.send(DatagramPacket p)方法,接收数据使用DatagramSocket.receive(DatagramPacket p)方法.
1.2,DatagramPacket
DatagramPacket类有如下构造方法:
1,DatagramPacket(byte[] buf, int length):构造 DatagramPacket,用来接收长度为length的数据包。
2,DatagramPacket(byte[] buf, int length, InetAddress address, int port):构造数据报包,用来将长度为length的包发送到指定主机上的指定端口号。
接收数据时使用第一次构造方法,发送数据时使用第二种构造方法.
1.3,InetAddress
Java中对IP地址进行包装的类,
DatagramPacket.getAddress()可以获取发送或接收方的IP地址.DatagramPacket.getPort()可以获取发送或接收方的端口.
1.4,UDP程序例子
发送程序:
import java.net.DatagramPacket.
import java.net.DatagramSocket.
import java.net.InetAddress.
public class UdpSend {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket().
String str = "hello , world!".
DatagramPacket dp = new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("192.168.0.105"),3000).
ds.send(dp).
ds.close(). //关闭连接
}
}
接收程序:
import java.net.DatagramPacket.
import java.net.DatagramSocket.
public class UdpRecv {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket(3000).
byte[] buf = new byte[1024].
DatagramPacket dp = new DatagramPacket(buf,buf.length).
ds.receive(dp).
String str = new String(dp.getData(),0,dp.getLength()).
System.out.println(str).
System.out.println("IP:" dp.getAddress().getHostAddress() ",PORT:" dp.getPort()).
ds.close().
}
}