小白学习java第12天(上):网络编程
首先对于网络编程,我们的先知道网络,就是其实对我我这中小白来说,搞清楚为什么比怎么做要来的更为深刻一点!
我需要还一个建议流程图:
当然这个只是简单的示意图,以我自己的电脑为了,我们可以看一下我的电脑上面的情况cmd + netstat -ano
了解原理之后,编程就显得比较简单了,因为对于java来说万物皆为对象,对于ip和协议这些都会有自己的类,我们只需要对其进行创建对象即可!!!
ip:
(唯一定位一台网络计算机,对于本机的ip地址就是127.0.0.1本机就是localhost,很多的关于ip的细节后面我会慢慢进行补充)
然后就说一下ip和域名是什么关系,其实很简单就是你一串数字肯定很难记,但是你输入域名肯定好记一点(IP地址与域名是一对多的关系。一个ip地址可以对应多个域名,但是一个域名只有一个IP地址。IP地址是数字组成的,不方便记忆,所以有了域名,通过域名地址就能找到ip地址。)
这个可以看出你去访问www.baidu.com这个就能看出地址(域名/IP地址),只是写数字不好记!
端口:(后面我再学习操作系统的时候还会详细进行思考一下这里面的底层逻辑)
端口表示计算机的进程(好比ip是一栋楼,然后门牌号就是端口!)
不同的进程有着不同的端口号(范围就是0-65535,但是有不同的协议,又可以分为TCP,UDP所以就是65535*2:
通讯协议:
网络通讯协议:速率,传输码率,代码结构,传输控制...其实我也是太知道里面的很复杂,如果有机会后面会了解一下,那我们就进行分层(TCP/IP协议族,实际上是一组协议)
TCP:
用户传输协议(就是打电话,要链接好了才能传输)
连接稳定(三次握手、四次挥手)
-------------------------------------
三次握手:
A你愁啥,
B瞅你咋的,
A然后就干一架了
四次挥手:
A我要走
B你真的要走了吗
B你真的真的要走了吗
A我真的走了
---------------------------------
传输完成、释放连接、效率低
UDP:
用户数据报协议(就像发短信,不用连接好,发出去就不管)
不连接,不稳定
不管有没有准备好,都可以发给你
TCP就是客户端和服务器
服务端:
package demo02;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
//服务段
public class TcpServerDemo01 {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket =null;
Socket accept = null;
InputStream inputStream = null;
ByteArrayOutputStream byteArrayOutputStream = null;
try {
//要有一个地址供客户端访问,现在这个地址就是localhost:9999
serverSocket = new ServerSocket(9999);
//等待客户端连接过来
accept = serverSocket.accept();
//读取客户端消息
inputStream = accept.getInputStream();
byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer) )!= -1){
byteArrayOutputStream.write(buffer,0,len);
}
System.out.println(byteArrayOutputStream);
} catch (IOException e) {
throw new RuntimeException(e);
}finally {
//关闭资源
serverSocket.close();
accept.close();
inputStream.close();
byteArrayOutputStream.close();
}
}
}
服务端:
package demo02;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
//客户端
public class TcpClientDemo01 {
public static void main(String[] args) throws IOException {
Socket socket = null;
OutputStream outputStream = null;
try {
//要知道服务端的地址
InetAddress serverIp = InetAddress.getByName("localhost");
System.out.println(serverIp);
//端口号
int port = 9999;
//创建socket连接
socket = new Socket(serverIp,port);
//发送数据
outputStream = socket.getOutputStream();
outputStream.write("你好,我是客户端!".getBytes());
} catch (Exception e) {
throw new RuntimeException(e);
}finally {
socket.close();
outputStream.close();
}
}
}
流程图:
(这里面的io流要进行详细的解释,后面我单独出一篇!!!)