2021-06-18

学习java第二十四天

网络编程

什么是TCP/IP?
TCP/IP协议是一个协议集合,包括我们常见的HTTP协议、IP协议、TCP协议、DNS协议等,都属于TCP/IP协议。

要想知道TCP/IP是什么,我们首先要知道为什么要有这个协议?拿一个生活中简单的例子来说,如果我们想做一个柜子,那我们就要告诉木匠,柜子要多高、多宽、多长,样式是什么样的、材质是什么样的等等,这样最后做出的柜子才能和我们想要的柜子一致,那么这些规则就可以理解为一种口头协议。同样的,两台电脑想要在全球亿万台计算机中完成准确、无误的通信,大量的协议支持是必不可少的。

TCP/IP协议中有一个重要的概念是分层,每个层级完成不同的功能。TCP/IP协议按照层次分为以下四层:应用层、传输层、网络层、数据链路层。为什么要分层?分层的目的就是为了层级之间的功能相对独立,互不影响。

在这里插入图片描述
TCP/IP通信数据流
在这里插入图片描述
IP协议(Internet protocol)
IP协议的作用在于把各种数据包准确无误的传递给对方,其中两个重要的条件是IP地址,和MAC地址。由于IP地址是稀有资源,不可能每个人都拥有一个IP地址,所以我们通常的IP地址是路由器给我们生成的IP地址,路由器里面会记录我们的MAC地址。而MAC地址是全球唯一的,除去人为因素外不可能重复。

IP实现两个基本功能:寻址和分段

socket网络编程

1.什么是socket?
Socket的英文原义是“孔”或“插座”。在网络编程中,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

Socket套接字是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

Socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

2.基于java的socket网络编程实现

Server端Listen监听某个端口是否有连接请求,Client端向Server 端发出连接请求,Server端向Client端发回Accept接受消息。这样一个连接就建立起来了。Server端和Client端都可以通过Send,Write等方法与对方通信。

对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:

1、创建Socket;

2、 打开连接到Socket的输入/出流;

3、按照一定的协议对Socket进行读/写操作;

4、关闭Socket。

package com.hg.day24.demo01;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer {
    public static void main(String[] args) throws IOException {
        //1、创建服务器serversocket 对象和系统要指定的端口号
        ServerSocket server = new ServerSocket(8888);
        //2、使用serversocket 对象中的accept 方法,获取到请求的客户端对象socket
        Socket socket = server.accept();
        //3、使用socket 对象中的getinputstream 获取网络中农工输入流对
        InputStream is = socket.getInputStream();
        //4、使用网络输入流中的read方法,读取客户端发送的数据
        byte[] bytes =new byte[1024];
        int len =is.read(bytes);
        System.out.println(new String(bytes,0,len));
        //5、使用socket对象中的outputstream 方法,获取输出流
        OutputStream os=socket.getOutputStream();
        //6、使用输出流中的write 给客户端会写数据
        os.write("收到数据,谢谢".getBytes());

        //7、释放资源
        socket.close();
        server.close();
        }
}
package demo01Tcp;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class TcpClient {
public static void main(String[] args) throws UnknownHostException, IOException {
	//1.创建一个客户端对象socket,构造方法中绑定服务器的IP地址和端口号
	Socket socket=new Socket("127.0.0.1",8888);
	//2.使用outputstream获取输出流对象
	OutputStream os=socket.getOutputStream();
	//3.使用write方法写数据
	os.write("你好,服务器".getBytes());
	
	//4.使用getinputstream获取输入流
	InputStream is=socket.getInputStream();
	//5.使用输入流read方法获取从服务器发来的数据
	byte[] bytes=new byte[1024];
	int len=is.read(bytes);
	
	System.out.println(new String(bytes,0,len));
	//释放资源
	socket.close();
	
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值