网络

什么是计算机网络:把分部在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件、软件、数据信息等资源。
计算机网络的主要功能:资源共享、信息传输与集中处理、均衡负荷与分布处理、综合信息服务(www/综合业务数字网络 ISDN)
什么是网络通信协议:计算机网络中实现通信必须有一些约定即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。
网络通信接口:为了使两个结点之间能进行对话,必须在它们之间建立通信工具(即接口),使彼此之间能进行信息交换。
接口包括两部分:
硬件装置:实现结点之间的信息传送
软件装置:规定双方进行通信的约定协议
通信协议分层的思想
为什么分层:由于结点之间联系很复杂,在指定协议时,把复杂成分分解成一些简单的成分,再将它们复合起来。最常用的复合方式是层次方式,即同层间可以通信,上一层可以调用下一层,而与下一层不发生关系。各层互不影响,利于系统的开发和扩展。
通信协议的分层规定:把用户应用程序作为最高层,把物理通信线路作为最底层,将其间的协议处理分为若干层,规定每层的任务,也规定每层的接口标准。

IP协议
IP(Internet Protocol)协议是网际层的主要协议,支持网间互连的数据报通信。它提供的主要功能有:无连接数据报传送和数据包路由选择和差错控制
<TCP/IP详解>书

IP:开头是网络ID号,后面都是主机号,A类网(1—126),B类网(128—192)C类网(192—223)
TCP:是专门设计用于在不可靠的因特网上提供可靠的、端到端的字节流通信的协议,它是一种面向连接的协议。

TCP连接是字节流而非报文流(可靠,慢)
UDP:向应用程序提供了一种发送封装的原始IP数据报的方法、并且发送时无需建立连接,是一种不可靠的连接(不可靠,快)
Socket
两个Java应用程序可通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Scoket
Scoket通常用来实现client—server连接
java.net包中定义的两个类Scoket和ServerScoket,分别用来实现双向连接的client端(客户端)和server端(服务器端)
建立连接时所需的寻址信息为远程计算机的IP地址和端口号(Port number)(端口号建议占1024以上的,1024以下系统可能占用了)
端口号分为TCP端口和UDP端口,每一个是65536个端口。
首先启动server,再启动clent。

import java.net.*;
import java.io.*;

public class ServerTest{
        public static void main(String[] args) throws Exception{
                //1025为端口号
                ServerSocket ss = new ServerSocket(5555); 
                //循环不断连接
                while(true){
                //侦测监听连接
                    Socket s = ss.accept();
                    //读取client的数据
                    DataInputStream dis = new DataInputStream(s.getInputStream());
                    System.out.println(dis.readUTF());
                    System.out.println("这混蛋有16个老婆");
                    dis.close();
                    s.close();
            }
            }
    }

 

import java.net.*;
import java.io.*;

public class ClientTest{
        public static void main(String[] args) throws Exception{
                Socket  s = new Socket("115.192.79.219", 5444);
                //通过流连接
                OutputStream os = s.getOutputStream();
                //包一层
                DataOutputStream dos = new DataOutputStream(os);
                dos.writeUTF("张三有几个老婆?");
                dos.flush();
                dos.close();
                s.close();
            }
    }

readUTF()是阻塞式的。上面两个程序同步式的,只能有一个客户端接收信息。

 

你可能感兴趣的:(网络)