网络编程

来源:互联网 发布:ubuntu安装飞秋 编辑:程序博客网 时间:2024/06/16 19:18

网络编程

网络基础知识

1 、计算机网络,就是把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件、软件、数据信息等资源。

2 、计算机网络是现代通信技术与计算机技术形结合的产物。

3 、计算机网络按规模大小和延伸范围分为局域网( LAN ),城域网( MAN )和广域网( WAN );按网络拓扑结构分为环型网,星型网和总线型网;按通信介质分为双绞线网、同轴电缆网、光纤网和卫星网。

4 、计算机网络协议分为三部分:语义(决定双方对话类型)、语法(决定双方对话格式)和变换规则(决定通信双方应答关系)。

5 、网络体系结构:国际标准化组织( ISO )于 l978 年提出 “ 开放系统互连参考模型 ” ,即 OSI ( Open System Interconnection )模型。该模型把计算机网络分成物理层、数据链路层、网络层、传输层、会话层、表示层、应用层等七层。

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

发送端

建立 udpsocket 服务端点。该端点建立,系统会随机分配一个端口。如果不想随机配置,可以手动指定。 
DatagramSocket ds = new DatagramSocket(9002);

将数据进行 packet 包的封装,必须要指定目的地地址和端口。 
byte[] buf = "wo shi shu ju".getBytes();
DatagramPacket dp =new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.254"),9001);

通过 socket 服务的 send 方法将该包发出。 
ds.send(dp);

将 socket 服务关闭。主要是关闭资源。 
ds.close();

接收端

建立 udp 的 socket 服务。要监听一个端口。 
DatagramSocket ds = new DatagramSocket(9001);

定义一个缓冲区,将该缓冲区封装到 packet 包中。 
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);

通过 socket 的 receive 方法将数据存入数据包中。 
ds.receive(dp);

通过数据包 dp 的方法 getData() 、 getAddress() 、 getPort() 等方法获取包中的指定信息。

关闭 socket 。 
ds.close();

基于 TCP 协议编程

一、服务端:

ServerSocket  用到 java.net.ServerSocket 类创建服务器 Socket

构造方法:

1 ) ServerSocket(int port) :创建绑定到特定端口的服务器套接字

2 ) ServerSocket(int port, int backlog) :利用指定的 backlog( 服务器忙时保持连接请求的等待客户数量 ), 创建服务器套接字并将其绑定到指定的本地端口号。

3 ) ServerSocket(int port, int backlog, InetAddress bindAddr) :使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器。

创建一个 TCP 服务器端程序的步骤

(1) 创建一个 ServerSocket

(2) 从 ServerSocket 接受客户连接请求

(3) 创建一个服务线程处理新的连接

(4) 在服务线程中,从 socket 中获得 I/O 流

(5) 对 I/O 流进行读写操作,完成于客户的交互

(6) 关闭 I/O 流

(7) 关闭 Socket

代码说明:

SeverSocket server=new ServerSocket(port)

Socket s=server.accept();

ObjectInputStream in=new ObjectInputStream(s.getInputStream());

ObjectOutputStream out=newObjectOutputStream(s.getOutputStream());

out.close();

in.close();

s.close();

服务器端程序调用 ServerSocket 类中的 accept() 方法等待客户端的连接请求,一旦 accept() 接收了客户端连接请求,该方法返回一个与该客户端建立了专线连接的 Socket 对象,不用程序去创建这个 Socket 对象。建立了连接的两个 Socket 是以 IO 流的方式进行数据交换的, Java 提供了 Socket 类中的 getInputStream() 返回 Socket 的输入流对象, getOutputStream() 返回 Socket 的输出流对象。

二、客户端:

Socket  客户端要与服务器建立连接 , 必须先创建一个 Socket 对象

构造方法 :

1)Socket(String host, int port) :创建一个流套接字并将其连接到指定主机上的指定端口号。

2)Socket(InetAddress address, int port) :创建一个流套接字并将其连接到指定 IP 地址的指定端口号。

创建一个 TCP 客户端程序的步骤

(1) 创建 Socket

(2) 获得 I/O 流

(3) 对 I/O 流进行读写操作

(4) 关闭 I/O 流

(5) 关闭 Socket

代码说明:

Socket connection=new Socket(127.0.0.1,7777);

ObjectInputStream input=new ObjectInputStream(connection.getInputStream());

ObjectOutputStream output=new ObjectOutputStream(connection.getOutputStream());

input.close();

output.close();

connection.close();

注意事项:

(1) 不要再服务程序中出现 static 属性,因为是所有客户端共享的。

(2) 不要从两个 Socket 中创建流用于通信,会出现通讯错误,原因:流的头不一样

(3) 不要从一个客户端多次创建 TCP 链接,那就成了两个客户端

(4) 要控制链接数,否则资源可能不够用,方法: public ServerSocket ( int port ,int backlog ) throws IOException backlog: 指的是连接数

原创粉丝点击