Java--网络与通信编程

TCP编程

TCP/IP通信协议是一种可靠的网络协议,在两端各自建立一个Socket,通过Socket产生IO流进行网络通信。

对象ServerSocket用于监听来自客户端的Socket连接请求。

//创建一个ServerSocket,用于监听客户端Socket的连接请求

ServerSocket ss=new ServerSocket(30000);

//采用循环不断接受来自客户端的请求

while(true){

      //每当接受到客户端Socket的请求,服务器端也对应产生一个Socket

      Socket s=ss.accept();  //如果没有连接请求,该方法会一直处于等待状态,线程被阻塞

     //下面就可以使用Socket进行通信了

     ...

 }

Socket 提供两个方法获取输入流和输出流:

InputStream getInputStream():返回该Socket对象对应的输入流,让程序通过该输入流从Socket中取出数据。

OutputStream getOutputStream():返回该Socket对象对应的输出流,让程序通过该输出流从Socket中输出数据。

TCP中的多线程

例:创建一个聊天室程序

在服务器端,提供两个类:

1、创建ServerSocket 监听的主类

2、处理每个Socket通信的线程类

客户端应包含两条线程

1、一条负责读取用户的键盘输入,并将用户输入的数据写入Socket对应的输出流中。

2、一条负责读取Socket对应输入流中的数据(从服务器端发送过来的数据),并将这些数据打印输出。其中负责读取用户键盘输入的线程由Myclient负责,也就是由程序的主线程负责。

实现非阻塞Socket通信

NIO和IO主要区别

特征NIOIO
 基于通道(Channel)和缓冲区基于字节流和字符流
阻塞非阻塞IO阻塞IO
选择器有选择器(监听多个通道的事件)无选择器

UDP编程

DatagramSocket对象作为基于UDP协议的Socket,使用DatagramPacket代表DatagramSocket发送或接收数据报。

DatagramSocket,比作码头,不维护状态,不产生IO流,唯一作用就是发送或接收数据报。

DatagramSocket通过三个构造器可构造DatagramSocket实例:

DatagramSocket()、DatagramSocket(int port)、DatagramSocket(int port,InetAddress laddr)

创建服务器时,需要创建指定窗口的DatagramSocket实例,这样有利于其他客户端发送数据报到该服务器。

创建实例后,采用如下两个方法接收和发送数据:

receive(DatagramPacket p):从该DatagramSocket中接收数据报;

send(DatagramPacket p):以该DatagramPacket p对象向外发送数据报。

发送数据时:DatagramSocket并不知数据去哪里,而是由DatagramPacket自身决定数据报的目的。

DatagramSocket如码头,DatagramPacket如集装箱(包含了目的)。

使用UDP协议时,DatagramSocket是发送或接收数据,DatagramPacket是数据载体。

DatagramPacket构造器:

1、DatagramPacket(byte buf[],int length)

2、DatagramPacket(byte buf[],int length,InetAddress addr,int port)

3、DatagramPacket(byte buf[],int offset,int length)//offset--起始位置

4、DatagramPacket(byte buf[],int offset,int length,InetAddress addr,int port)

接收数据前:采用构造器1或3创建DatagramPacket对象,然后调用receive()等待数据报,一直等待(会阻塞调用该方法线程)。

发送数据前:采用构造器2或4创建DatagramPacket对象,然后调用send()方法。

信息反馈:

获取发送者信息:InetAddress getAddress()、int getPort()、SocketAddress getSocketAddress()

其中,返回的SocketAddress对象包含IP地址和端口。

使用MulticastSocket

多点广播

思想--设置一组特殊网络地址作为多点广播地址,每一个地址看作一个组,客户端需要发送、接收广播信息时,加入到该组即可。

IP协议为多点广播提供更多地址范围为:224.0.0.0--239.255.255.255

MulticastSocket类是DatagramSocket的子类。

采用如下3种方式创建对象:

public MulticastSocket()、public MulticastSocket(int portNumber)、public MulticastSocket(SocketAddress bindaddr)

创建MulticastSocket对象后,使用joinGroup(InetAddress multicastAddr)、leaveGroup(InetAddress multicastAddr)加入或离开多点广播地址。

使用setInterface选择监听MulticastSocket所使用的网络接口

使用getInterface查询MulticastSocket监听的网络接口

MulticastSocket与DatagramSocket的区别:

MulticastSocket多了如下方法:setTimeToLive(ttl)--ttl设置数据可以跨越多少网络。

ttl=0--数据报应留在主机;1--本地局域网;32--本站点的网络;64--本地区;128--本大洲;255--所有地方

代理服务器

代理网络用户获取信息。工作在开放系统互联(OSI)模型的对话层。

两个功能:

1、突破自身IP限制,对外隐藏自身IP地址。突破IP限制包括访问国外受限站点、访问国内特定单位、团体的内部资源。

2、提高访问速度,代理服务器提供的缓冲功能可以避免每个用户直接访问远程主机,从而提供客户端访问速度。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值