Java网络通信简介

一、网络基础知识

1、IP

网际协议,将一个消息从一个主机传递到另一个主机使用的协议称为IP协议,它是Internet的网络协议。

2、TCP

传输控制协议,TCP是一种可靠的面向连接的传输服务,TCP处理IP协议中没有处理的通信问题,向应用程序提供可靠的通信连接,能自动适应网络的变化,它保障了在网络中正确无误地传递数据包。

3、UDP

用户数据报包协议,与TCP一样是属于传输层的协议,它实现的是不可靠、无连接的数据报服务,这样可以节省建立连接与拆除连接的时间。

二、套接字

套接字(Sockets)是支持TCP/IP协议的网络通信的基本操作单元,可以将套接字看作不同主机之间的进程进行双向通信的端点。

套接字根据传输的数据类型的差异,可以分为:面向连接的套接字(Stream Sockets)和无连接的套接字(Datagram Sockets)。

三、TCP套接字编程(面向连接)

TCP套接字编程涉及的类主要有:InetAddress类、Sockets类、与ServerSockets类。

1、InetAddress类

InetAddress类用于表示Internet上的主机地址,InetAddress类的一个实例是由主机名和IP地址组成的。

例如:

public class DemoAddress {

	public DemoAddress() {
		// TODO Auto-generated constructor stub
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		try {
			InetAddress ia = InetAddress.getByName("king");
			String straddress = ia.getHostAddress();
			String strname = ia.getHostName();
			System.out.println("主机IP地址:"+straddress+"\n"+"主机名称:"+strname);
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

2、Sockets类

Sockets类是Java网络应用程序的一个基本构造模块,它实现了程序之间的双向通信。

例如:

public class DemoClient {

	public DemoClient() {
		// TODO Auto-generated constructor stub
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
<span style="white-space:pre">			</span>//设定端口
			Socket client = new Socket("king", 20015);
			OutputStream os = client.getOutputStream();
			byte[] bu = "abcd".getBytes();
			os.write(bu, 0, bu.length);

			client.close();

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

3、ServerSockets类

ServerSockets类用来侦听所有来自指定端口的连接,并且为每一个新的连接创建一个Socket对象,完成后就可以通信了。

例如:

public class DemoServer {

	public DemoServer() {
		// TODO Auto-generated constructor stub
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		try {
			//指定端口
			ServerSocket ss = new ServerSocket(20015);
			Socket s = ss.accept();
			InputStream is = s.getInputStream(); 
			byte[] b = new byte[1024];
			int length = is.read(b);
		
			System.out.println("Server:"+"\n"+new String(b,0,length));
			s.close();
			ss.close();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

	}

}

四、UDP套接字编程(无连接)

UDP套接字涉及的类有DatagramPacket类与DatagramSocket类,前一个类包含了要发送的数据,后一个则执行发送与接收数据的任务。

1、DatagramPacket类

其代表了UDP中的数据报,被发送的数据报包含了目的地址与内容。其构造方法如下:

DatagramPacket(byte[] buf, int length)
          构造 DatagramPacket,用来接收长度为 length 的数据包。
DatagramPacket(byte[] buf, int length,InetAddress address, int port)
          构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
DatagramPacket(byte[] buf, int offset, int length)
          构造 DatagramPacket,用来接收长度为 length 的包,在缓冲区中指定了偏移量。
DatagramPacket(byte[] buf, int offset, int length,InetAddress address, int port)
          构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。
DatagramPacket(byte[] buf, int offset, int length,SocketAddress address)
          构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。
DatagramPacket(byte[] buf, int length,SocketAddress address)
          构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。

参数含义解释:

*buff:数据缓冲区号。

*InetAddress:目的地址录。

*Offest :指定缓冲区的起始位置。

*Port:目的地的端口号。

*length : 缓冲区的长度。

2、DatagramSocket类

其负责报文的发送与接收,它创建UDP套接字,构造方法如下:

 DatagramSocket()
          构造数据报套接字并将其绑定到本地主机上任何可用的端口。
protectedDatagramSocket(DatagramSocketImpl impl)
          创建带有指定 DatagramSocketImpl 的未绑定数据报套接字。
 DatagramSocket(int port)
          创建数据报套接字并将其绑定到本地主机上的指定端口。
 DatagramSocket(int port,InetAddress laddr)
          创建数据报套接字,将其绑定到指定的本地地址。
 DatagramSocket(SocketAddress bindaddr)
          创建数据报套接字,将其绑定到指定的本地套接字地址。

参数含义解释:

*laddr:该socket绑定的地址。

*port:该socket绑定的端口。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值