Java SE 10 网络编程

网络编程!=网站编程

1.网络基础

什么是计算机网络

计算机网络,是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

 

计算机网络的主要功能

1.主要目的:共享资源

2.扩大共享资源的地理范围

3.分布式控制提高可靠性

4.促进分布式数据处理和数据库的发展

5.提供各种通信服务

6.提高可扩充性

 

什么是网络通信协议

计算机网络中实现通信必须要有一些约定即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。

 

网络通信接口

为了使两个节点之间能进行对话、必须在他们之间建立通信工具(即接口),使彼此之间能进行信息交换。接口包括两部分:

硬件装置:实现节点之间的信息传送

软件装置:规定双方进行通信的约定协议

 

2.通信协议分层的思想

为什么要分层

由于节点之间联系很复杂,在制定协议时,把复杂成分分解成一些简单的成分,再将他们复合起来。最常用的复合方式是层次方式,即同层间可以通信、上一层可以调用下一层,而与再下一层不发生关系。各层互不影响,利于系统的开发和扩展。

通信协议的分层规定

把用户应用程序作为最高层,把物理通信线路作为最低层,将其间的协议处理分为若干层,规定每层处理的任务,也规定每层的接口标准。

 

TCP/IP参考模型



3.IP地址

4.TCP/UDP

TCP和UDP协议

TCP(transmission control protoccl)是专门设计用于在不可靠的因特网上提供可靠的、端到端的字节流通信的协议。它是一种面向有连接的协议。TCP连接是字节流而非报文流。

UDP(user data protocol)UDP向应用程序提供了一种发送封装的原始IP数据报的方法,并且发送时无需建立连接,是一种不可靠的连接。

 

5.TCP/UDP程序的写法(流的运用)

5.1TCP

Socket

两个Java程序可以通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Socket。

Socket通常用来实现client-server连接。

Java.net包中定义的两个类Socket和ServerSocket,分别用来实现双向连接的client端和server端

建立连接时所需的寻址信息为远程计算机的IP地址和端口号(port number)

 TCP端口 UDP端口分开的

 每一个有65536个端口

TCPServer

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
 * TCP Socket 通信
 * 服务器,先运行服务器端
 * */
public class TCPServer {
       public static void main(String[] args) throws IOException {
              ServerSocket ss = new ServerSocket(6666);
              while(true) {            
                     Socket s = ss.accept();    //accept()阻塞式    等待连接
                     System.out.println("server:A client connect!");
                    
                     InputStream is = s.getInputStream();               //从客户端读取信息
                     DataInputStream dis = new DataInputStream(is);
                     String s1 = null;
                     if((s1=dis.readUTF())!=null) {
                            System.out.println(s1);   //readUTF()阻塞式
                     }
                     System.out.println("server:from:"+s.getInetAddress()+"port:"+s.getPort());
                    
                     OutputStream os = s.getOutputStream();          //给客户端发信息
                     DataOutputStream dos =new DataOutputStream(os);
                     dos.writeUTF("server:hi");
                     dos.flush();
                    
                     dis.close();
                     dos.close();
                     s.close();
              }
       }
}
/*
server:A client connect!
client:Hello server!
server:from:/127.0.0.1port:1957
 */
TCPClient
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
/**
 * TCP Socket 通信
 * 客户端
 * 端口随机选用
 * 先起服务端再起客户端
 * */
public class TCPClient {
       public static void main(String[] args) throws UnknownHostException, IOException, InterruptedException {
             
              Socket s = new Socket("127.0.0.1",6666);   //本地6666端口
             
              OutputStream os = s.getOutputStream();             //给服务器发信息
              DataOutputStream dos = new DataOutputStream(os);
              dos.writeUTF("client:Hello server!");
              dos.flush();
      
              InputStream is = s.getInputStream();         //从服务器接收信息
              DataInputStream dis = new DataInputStream(is);
              String s1 = null;
              if((s1=dis.readUTF())!= null) {
                     System.out.println(s1);
              }
             
              dos.close();
              dis.close();
              s.close();
       }
}
 
/*
server:hi
 */

 

 

5.2UDP

不可靠、效率高、数据报/非连接   音频、视频…

UDPS

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
 
public class UDPS {
       public static void main(String[] args) throws IOException {
             
              byte[] buf = new byte[1024];
              //数据报包用来实现无连接包投递服务
              DatagramPacket dp = new DatagramPacket(buf,buf.length);
              //监听UDP5678端口 ,接收数据报包
              DatagramSocket ds = new DatagramSocket(6666);
              while(true) {
                     ds.receive(dp);           //阻塞式方法
                     System.out.println(new String(buf,0,dp.getLength()));
              }
       }
}
/*
hello
*/
UDPC 

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
 
public class UDPC {
       public static void main(String[] args) throws IOException {
             
              byte[] buf = (new String("hello")).getBytes();//将一个字符串转换为字节数组
              DatagramPacket dp = new DatagramPacket(buf,buf.length,
                            new InetSocketAddress("127.0.0.1",6666));//指明数据报包传送的目的地址
              DatagramSocket ds = new DatagramSocket(9999);
              ds.send(dp);
              ds.close();
       }
}
将lang类型转换为字节数组 

UDPS

import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
 
public class UDPS {
       public static void main(String[] args) throws IOException {
             
              byte[] buf = new byte[1024];
              //数据报包用来实现无连接包投递服务
              DatagramPacket dp = new DatagramPacket(buf,buf.length);
              //监听UDP5678端口 ,接收数据报包
              DatagramSocket ds = new DatagramSocket(6666);
              while(true) {
                     ds.receive(dp);           //阻塞式方法
                     ByteArrayInputStream bis = new ByteArrayInputStream(buf);//对接收的字节数组进行处理
                     DataInputStream dis = new DataInputStream(bis);
                     System.out.println(dis.readLong());
              }
       }
}

 UDPC

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
 
public class UDPC {
       public static void main(String[] args) throws IOException {
             
              long n = 10000L;
              ByteArrayOutputStream baos = new ByteArrayOutputStream();
              DataOutputStream dos = new DataOutputStream(baos);
              dos.writeLong(n);
             
              byte[] buf = baos.toByteArray();
              DatagramPacket dp = new DatagramPacket(buf,buf.length,
                            new InetSocketAddress("127.0.0.1",6666));//指明数据报包传送的目的地址
              DatagramSocket ds = new DatagramSocket(9999);
              ds.send(dp);
              ds.close();
       }
}

总结:

网络协议分层思想

IP的概念

TCP/UDP的概念

TCP/UDP程序的写法

       知识点的融会贯通+流的运用


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值