目录
计算机网络基础知识
IP
IP:地址
公网
公网:任何地方去访问这个IP,都是指定一台机器
局域网
局域网:比如路由器下,所有机器都组成一个网络。同一个网络中的其他机器可以通过这个IP地址来访问你的机器。
本地计算机网络
在自己的计算机中,有一个本机回环,就比如localhost,默认为127.0.0.1。一般在127.0.0.1后面会跟上端口。在本地计算机中,会有多个进程。计算机就会给这些进程分配端口号。我们可以通过cmd命令,来查看,我们计算机中有哪些进程在占用哪些端口号。netstat这个命令

可以看到这些进程都是遵从TCP协议的,注意其本地地址。
本地计算机中的端口号最多有两个字节Byte,一般的前1024个端口号一般是系统占用的,我们自己想去设置就一般去设置成10000以后的端口号。
DNS
DNS服务:根服务器。我们可以在cmd命令中ping一下百度的网址。

我们可以看见百度域名的IP地址是 36.152.44.96,但我们一般去搜索引擎上面不会直接写IP地址而是输入域名,IP地址不容易记忆,域名好记忆嘛。DNS做的工作就像是一个哈希表,IP地址和域名是一一对应的关系。
Java网络通信
ServerSocket
jdk1.8中的net包下会有一个ServerSocket类,我们可以去API文档中先查看下。


Socket
和后面提及的Socket是一样的都是套接字。我们将用到ServerSocket的第二个构造方法,就是参数是端口号的那个。那我们怎么来理解这个套接字呢!我化了一个模型
连接模型

ServerSocket是去监听客户端的连接的,一开始这个管道是阻塞的,当有端口请求发送上来的时候就会去建立一个连接,拿到一个Socket对象。然后服务端拿到Socket对象之后,获取这个对象的输入输出流,我们就可以进行写入和读取数据。这一章我们先来建立连接直接通信。详细的发送消息放到后面。下面就是详细的代码,我就写了两个类,一个服务端,一个客户端。
注意:服务端的端口号就是整个程序这个进程在本地计算机中运行的端口号,客户端的端口号是我们自己设置的!
Server
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
//初始化默认的ServerSocket对象为空
private ServerSocket serverSocket = null;
//服务端连接的方法
public void ConnectServer(){
//捕获异常
try {
//实例化severSocket对象
serverSocket = new ServerSocket(50000);
//监听Socket的连接,未监听到之前 阻塞状态
System.out.println("监听Socket对象中,处于阻塞状态中……");
Socket socket_server = serverSocket.accept();
//监听到之后,生成并返回一个Socket对象
System.out.println("连接成功" + " "+ socket_server.getInetAddress() + " " + socket_server.getPort());
//从socket_server上获取输出流
OutputStream os = socket_server.getOutputStream();
//定义一个字符串
String msg = "I am server";
//发送
os.write(msg.getBytes());
} catch (IOException e) {//抛出并处理异常
e.printStackTrace();
}
}
public static void main(String[] args) {
Server server = new Server();
server.ConnectServer();
}
}
Client
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class Client {
//初始化一个Socket对象为空
private Socket socket_cliect = null;
//客户端连接的方法
public void ConnectCliect(){
//捕获异常
try {
//将socket_client实例化
socket_cliect = new Socket("localhost", 50000);
System.out.println("启动客户端");
//从socket_client上获取输入流
InputStream is = socket_cliect.getInputStream();
System.out.println("开始读取信息");
int readmsg = 0;
while (true){
readmsg = is.read();
if(readmsg == -1){
break;
}
System.out.print((char)readmsg);
}
} catch (IOException e) {//抛出并处理异常
e.printStackTrace();
}
}
public static void main(String[] args) {
Client client = new Client();
client.ConnectCliect();
}
}
运行结果

本文介绍计算机网络的基础概念,包括IP地址、公网与局域网的区别,以及本地计算机网络中的端口分配等内容。通过一个简单的Java网络通信示例,演示如何使用ServerSocket与Socket实现服务器与客户端之间的基本通信。
471

被折叠的 条评论
为什么被折叠?



