-
网络基础
-
TCP/IP协议
IP协议:
(Internet Protocol)协议是网际层的主要协议,支持网间互连的数据报通信。它提供主要功能有:
无连接数据报传送
数据报路由选择和差错控制 -
IP地址
-
Socket通信
两个java应用程序可通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Socket
Socket通常用来实现client-server连接
java.net包中包含定义的两个类Socket和ServerSocket,分别用来实现双向连接的client和server端
建立连接时所需的寻址信息为远程计算机的IP地址和端口号(Port number)
- 分CP端口 UDP端口 分开的
- 每一个65536个端口
左侧为Server端,右侧为client端,端口号指的是server端的端口号,client端也有端口号,但是在实际使用中是随机分配的, -
TCP/UDP 通话的两种方式
TCP(transmission control protocol):是专门设计用于在不可靠的因特网上提供可靠的、端到端的字节流通信的协议。它是一种面向连接的协议。TCP连接是字节流而非报文流。
UDP(user data protocol):UDP向应用程序提供了一种发送封装的原始IP数据报的方法、并且发送时无需建立连接。是一种不可靠的连接。
特点:
TCP先确定建立好连接,才能通话,是可靠的。但是,慢。银行交易,服务器登陆账号
UDP类似于广播式的说话,发电报,至于对方是否收到不确定,不可靠。但是,快。语音,视频,游戏 -
TCPSever
import java.net.*;
import java.io.*;
public class TCPServer {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(6666);
while(true) {
Socket s = ss.accept();
DataInputStream dis = new DataInputStream(s.getInputStream());
System.out.println(dis.readUTF());
dis.close();
s.close();
}
}
}
- TCPClient
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) throws Exception {
Socket s = new Socket("127.0.0.1",6666);
OutputStream os = s.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF("hello server!");
dos.flush();
dos.close();
s.close();
}
}
- TCP Socket 通信模型
此处缺少了学生作业的那一项代码,日后补回
UDP
- 不可靠的
- 效率高
- 数据报/非连接
- 音频、视频、…
UDP严格意义上讲不区分client和server,因为不区分socket
Longl类型的数据:
Server
import java.net.*;
import java.io.*;
public class TestUDPServerLong {
public static void main(String args[]) throws Exception {
byte buf[] = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
DatagramSocket ds = new DatagramSocket(5678);
while(true) {
ds.receive(dp);
ByteArrayInputStream bais = new ByteArrayInputStream(buf);
DataInputStream dis = new DataInputStream(bais);
System.out.println(dis.readLong());
}
}
}
Client
import java.net.*;
import java.io.*;
public class TestUDPClientLong {
public static void main(String args[]) throws Exception {
long n = 10000L;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeLong(n);
byte buf[] = baos.toByteArray();
DatagramPacket dp = new DatagramPacket(buf,buf.length,
new InetSocketAddress("127.0.0.1",5678)
);
DatagramSocket ds = new DatagramSocket(9999);
ds.send(dp);
ds.close();
}
}
总结
-
网路协议分层思想:
分层:是为了写程序更加统一、便捷,可扩展性好 -
IP的概念:IP独一无二的地址,同一台机器上的不同应用程序,叫端口;端口分TCP/UDP,各有65536个端口
-
TCP比较慢,可靠;UDP快,不可靠
-
TCP/UDP的写法:知识点的融汇贯通 + 流的作用