网络编程

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

网络体系结构:
网络体系结构定义计算机设备和其他设备如何连接在一起以形成一个允许用户共享信息和资源的通信系统。

    开放系统互联参考模型,  OSI 保证了各类设备生产厂商的产品兼容性。

计算机网络分成:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层,

OSI参考模型
………….|……………….
提供应用程序间通信 |应用层
处理数据格式、数据加密等|表示层
建立、维护和管理会话|会话层
建立主机端到端的连接|传输层
寻址和路由选择|网络层
提供介质访问、链路管理等|数据链路层
比特流传输|物理层

根据上表可以知道,当用户要传输数据时,OSI参考模型会在每一层上对数据进行封装。从上到下
从而达到物理层,实现传输。

网络编程的目的:
直接或间接地通过网络协议与其他计算机进行通信,
问题: 如何准确定位网络中的一台或多台主机。
定位后如何高效的进行数据传输。

网络通讯要素:
IP地址
每台机器必须有一个唯一的地址。
IP对应的类InetAddress

端口号: 表示计算机上的应用程序,代表程序的逻辑地址

传输协议
为计算机网络中进行数据交换而建立的规则、标准或约定
常见的传输协议:
TCP
是一种面向连接的保证可靠传输的协议。TCP传输得到一个顺序无差错的数据流。
UDP
是一种无连接的协议,每一个数据包都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传送到目的地,能否到达目的地,到达目的地的时间及内容的正确性无法保证。

Socket:
流行的网络编程模型:客户机/服务器
C/S 客户端/服务器 B/S 只要有浏览器/服务器。
Socket概述:
Socket通常称为套接字,用于描述IP地址和端口。是一个通信链的句柄,应用程序通常通过套接字向网络发出请求或者应答网络请求。

是连接网络上的两个程序键的双向通信端点。

Socket进行网络通信的过程:
1、服务器将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户的连接请求。
2、客户程序根据服务器程序所在的主机名和端口号发出连接请求。
3、服务器接受连接请求,并获得一个新的绑定到不同端口地址的套接字。
4、客户和服务器通过读、写套接字进行通信。

基于TCP的Socket编程:
建立TCP服务端步骤:
1、创建一个SeverSocket对象
2、调用accept()方法接受客户端请求。
3、从Socket中获取IO流。
4、对I/O流进行读写操作,完成与客户端的交流。
5、关闭IO流和socket
建立TCP客户端步骤:
1、创建一个Socket对象。
2、从Socket中获取I/O流。
3、对I/O流进行读写操作,完成与服务端的交互。
4、关闭I/O流和Socket

eg:package com.tian.internet;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

//在客户端的控制台上输入内容,发送给服务端,服务端收到后打印在控制台上。
public class Test3 {
public static void main(String[] args) throws IOException {

             //创建一个serverSocket对象。
           ServerSocket serverSocket = new ServerSocket(8888);
           //调用Accept方法来接受客户端请求。
           Socket socket = serverSocket.accept();
           System.out.println(socket.getInetAddress().getHostAddress()+" has connection");
           //获取socket对象的输入输出流,利用socket类的getInputStream方法。
           BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
          //通过socket对象得到输出流。
           BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
           //读取客户端数据
           String line =null;
           //读取socket出入的字符。
           while ((line=br.readLine())!=null) {
                if (line.equals("over")) {
                     break;
                }
                System.out.println(line);
                //把返回的数据写入到socket的输出流中。
                bw.write(line.toUpperCase());//把字母转换成大写出入输出类。
                bw.newLine();
                bw.flush();
           }
           //关闭流。
           bw.close();
           br.close();
           socket.close();
           System.out.println(socket.getInetAddress().getHostAddress()+"has disconnection");

 }

}

package com.tian.internet;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Test3Client {

 public static void main(String[] args) throws UnknownHostException, IOException {


           // 产生一个socket对象。
           Socket socket = new Socket("192.168.56.1",8888);
           //创建一个字符读取IO对象,实现读入输入数据。
           BufferedReader  br = new BufferedReader(new InputStreamReader(System.in));
           //创建输出流,得到socket的输出。
           BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
           //创建socket的字符读取对象
           BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
           //字符数据写入到socket对象的字符写入流。
           while(true){
                String line = br.readLine();
                bw.write(line);
                bw.newLine();
                bw.flush();
                if (line.equals("over")) {
                     break;
                }
                System.out.println(reader.readLine());//读取服务端放回的字符。
           }
           //关闭所有资源。
           reader.close();
           br.close();
           bw.close();
           socket.close();

 }

}

URL
URL是统一资源定位器的简称,它表示Internet上某一资源的地址。通过URL我们可以访问Internet上的各种网络资源,例如:www. ftp站点,

URL基本结构由5部分组成:
传输协议://主机名:端口号:文件名#引用。

URL编程:
在Java中的.net包中有URL类,我们可以通过构造方法初始化一个URL对象。
获得URL对象后 ,可以有多个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值