网络编程技术

1、Socket简介

①Socket概述

②Socket通信原理

③java.net包

2、基于TCP协议的Socket编程

java.net包的两个类SocketServerSocket,分别用来实现双向安全连接的客户端服务器端,它们是基于TCP协议进行工作的,它的工作过程如同打电话的过程,只有双方都接通了,才能开始通话。

进行网络通信时,Socket需要借助数据流来完成数据的传递工作。如果一个应用程序要通过网络向另一个应用程序发送数据,只要简单的创建Socket,然后将数据写入到与该Socket关联的输出流即可,对应的,接收方的应用程序创建Socket,从相关联的输入流读取数据即可。链接:使用Socket编程实现用户登录

Socket通信模型如下:

注意:2个端点在基于TCP协议编程Socket编程中,经常一个作为客户端,一个作为服务器端。也就是client-server模型。

①Socket类

Socket对象在客户端和服务器之间建立连接。构造方法创建套接字,并将此套接字连接至给定的主机和端口。以下是与此Socket对象关联的构造方法和一些常用方法。

a、构造方法

第一种构造方法以主机名和端口号作为参数创建一个Socket对象。构造方法可能抛出UnKnownHostException或IOException异常,必须捕获并处理它们。

			// Socket s=new Socket(hostName,port);
			Socket socket = new Socket("127.0.0.1", 6000);

另一种构造方法以InetAddress对象和端口号作为参数来创建一个Socket对象。构造方法可能抛出UnKnownHostException或IOException异常,必须捕获并处理它们。

			// Socket s=new Socket(address,port);

b、常用方法

返回值方法说明
InetAddressgetInetAddress()返回与Socket对象关联的InetAddress
intgetPort()返回此Socket对象所连接的远程端口
intgetLocalPort()返回此Socket对象所连接的本地端口
InputStreamgetINputStream()返回与此套接字关联的InputStream
OutputStreamgetOutputStream()返回与此套接字关联的OutputStream
voidclose()关闭该Socket

②ServerSocket类

ServerSocket对象等待客户端建立连接,连接建立以后进行通信。

a、构造方法

第一种构造方法接受端口号作为参数创建ServerSocket对象。创建此对象可能抛出IOException异常,必须捕获和处理它。

			// ServerSocket socket=new ServerSocket(port);
			ServerSocket socket = new ServerSocket(6000);

另一种构造方法接受端口号和最大队列长度作为参数。队列长度表示系统在拒绝连接前可以拥有的最大的客户端连接数。

			// ServerSocket socket2 = new ServerSocket(port,max);
			ServerSocket socket2 = new ServerSocket(6000, 5000);

b、常用方法

Socket类中列出的方法也适用于ServerSocket类。此外,ServerSocket类具有accept()方法,此方法用于等待客户端触发通信,这样Socket对象就可用于进一步的数据传输。

3、基于UDP协议的Socket编程

基于TCP的网络通信是安全的,是双向的,如同拨打10086服务电话,需要先有服务端,建立双向连接后,才开始数据通信,而UDP的网络通信就不一样了,只需要指名对方地址,然后将数据送出去,并不会事先连接。这样的网络通信数据是不安全的,应用场合如聊天系统。咨询系统等。

数据报是表示通信的一种报文类型,使用数据报进行通信时无需实现建立连接这个过程,它是基于UDP协议进行的。

Java中有两个可使用数据报实现通信的类,即DatagramPacket和DatagramSocket。

DatagramPacket类起到数据容器的作用。

DatagramSocket类用于发送或接收DatagramPacket。

DatagramPacket类不提供发送或接收数据的方法,而DatagramSocket类则提供send()方法和receive()方法,用于通过套接字发送和接收数据报。

①DatagramPacket类

a、构造方法

DatagramPacket(byte[] buf, int length)
          构造 DatagramPacket用来接收长度为 length 的数据包。
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
          构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。

b、常用方法

InetAddressgetAddress()
          返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的。
 byte[]getData()
          返回数据缓冲区。
 intgetLength()
          返回将要发送或接收到的数据的长度。
 intgetPort()
          返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的。

②DatagramSocket类

a、构造方法

DatagramSocket()
          构造数据报套接字并将其绑定到本地主机上任何可用的端口。
DatagramSocket(int port)
          创建数据报套接字并将其绑定到本地主机上的指定端口。

b、常用方法

 voidclose()
          关闭此数据报套接字。
 voidconnect(InetAddress address, int port)
          将套接字连接到此套接字的远程地址。
 voiddisconnect()
          断开套接字的连接。
 InetAddressgetLocalAddress()
          获取套接字绑定的本地地址。
 intgetLocalPort()
          返回此套接字绑定的本地主机上的端口号。
 booleanisBound()
          返回套接字的绑定状态。
 booleanisClosed()
          返回是否关闭了套接字。
 booleanisConnected()
          返回套接字的连接状态。
 voidreceive(DatagramPacket p)
          从此套接字接收数据报包。
 voidsend(DatagramPacket p)
          从此套接字发送数据报包。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值