学习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();
}
}