关于网络通信

网络通信

例子:

下载资源
资源上传
从服务器(某个网络终端)取得数据
向其他计算机发送消息
接收其他计算机发送的消息
计算机之间的交流,计算机之间数据的传递

ip地址

简述:ip地址是网络中计算机的唯一标识。
举例:xx.xx.xx.xx xx是0-255之间的一个数字
问题:
什么是局域网ip(192.168.xx.xx),什么是外网ip(查询到全球互联网下的任一台计算机,一般为了节省地址,服务器是独立IP,其他可能一个局域网内是一个外网IP)
如何查看本机ip(ipconfig)
ip是不能重复的
局域网ip在局域网内,不可以重复。外网ip在外网环境下不可以重复
每个域名,访问的其实都是某个服务器,服务器其实是一台计算机,是计算机就有一个唯一的ip地址。
访问域名的时候,其实就是通过服务器的ip地址,找到服务器并获取数据。
域名跟ip地址是一一对应的。
ping 域名
ping ip地址

特殊的ip地址
127.0.0.1 localhost

什么是ipv4和ipv6

端口号

有了地址可以找到住的地方,这个地方可能有很多人同时居住,我们还需要一个收件人。端口就相当于收件人。
我们的电脑上有很多运行的程序,有的程序不需要跟外界交互(单机软件)
有的程序需要跟外界交互,这个时候我们需要通过端口号区分我们要跟那个软件交互。
总结:通过ip定位计算机,通过port定位哪个软件
注意:端口号是不能重复的。端口号是一个数字。

通信协议

两个计算机通信,也就是两个计算机交流,也就是两个计算机交流数据。

通信规则
UDP
速度快
不需要建立连接
不可靠
TCP
速度慢
需要通过三次握手建立连接,四次挥手断开连接
可靠
举例:
UDP:发短信
TCP:打电话
网络编程的三要素总结:IP地址,端口号,通信协议。

Socket套接字

在程序中我们通过Socket进行通信,在使用Socket通信的时候
需要指定上面所说的几个条件(ip,port,协议)

数据发送分成两步
第一步是监听(等待数据发送过来),用来接收数据。需要指定监听的端口号
第二步是发送,需要指定发送到哪个计算机(IP地址),需要指定发送到这个计算机的哪个端口。

Socket中分为发送端和接收端
发送端一般为客户端,接收端为服务器端。
一般情况下我们会有多个客户端,一个服务器端。

UDP

使用UDP发送数据

1
2
3
4
5
6
7
8
DatagramSocket ds = new DatagramSocket();
byte[] bys = "".getBytes();
int length = bys.length;
InetAddress ip = InetAddress.getByName("xx.xx.xx.xx");
int port = 7878;
DatagramPacket dp = new DatagramPacket(bys,length,ip,port);
ds.send(dp);
ds.close();

使用UDP接收数据

1
2
3
4
5
6
7
8
9
10
11
DatagramSocket ds = new DatagramSocket(7878);//为什么接收的时候,需要直接指定端口号,而发送的时候,不是在这里指定
byte[] data = new byte[1024];
int length = data.length;
DatagramPacket dp = new DatagramPacket(data,length);
ds.receive(dp);
byte[] dataReceive = dp.getData();
int length2 = dp.getLength();
String str = new String(dataReceive,0,length2);
InetAddress address = dp.getAddress();
int port = dp.getPort();
ds.close();

TCP

TCP发送端(客户端)

1
2
3
4
Socket s = new Socket("xx.xx.xx",port);
OutputStream os = s.getOutputStream();
os.write("xxxx".getBytes());
s.close();

TCP接收端(服务器端)

1
2
3
4
5
6
7
8
9
10
11
12
ServerSocket ss = new ServerSocket(port);

Socket s = ss.accetp();

InputStream in = s.getInputStream();

byte[] data = new byte[1024];
int length = in.read(data);
String s = new String(data,0,length);

s.close();
ss.close();

:转载文章请注明出处,谢谢~