摘要:
1. socket介绍
2. 端口
3. java提供网络功能类
4. socket通信模型
5. TCP,UDP的优缺点和应用场景
1、socket介绍:
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力
2、端口
1、 用于区分不同应用程序
2、 端口号的范围0~65535 其中0~1023为系统所保留
3、 IP地址和端口号组成socket,socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础
4、 http:80 tp:21 telnet:23
3、java提供的网络功能有4大类
1、 InetAddress:用于标识网络上的硬件资源(IP地址)
2、 URL:统一资源定位符,通过URL可以直接读取或写入网络上的数据
3、 Sockets:使用TCP协议实现网络通信的Socket相关的类
4、 Datagram:使用UDP协议,将数据保存在数据报红,通过网络进行通信
4、socket通信模型
基于TCP协议的socket通信模型
/*
*客户端核心代码(异常未处理)
*/
//1.创建客户端Socket,指定服务器地址和端口
Socket socket=new Socket("localhost", 6666);
//2.获取输出流,向服务器端发送信息
OutputStream os=socket.getOutputStream();//字节输出流
PrintWriter pw=new PrintWriter(os);//将输出流包装为打印流
pw.write("用户名:xxx;密码:xxx");
pw.flush();
socket.shutdownOutput();//关闭输出流
//3.获取输入流,并读取服务器端的响应信息
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String info=null;
while((info=br.readLine())!=null){
System.out.println("我是客户端,服务器说:"+info);
}
//4.关闭资源
br.close();
is.close();
pw.close();
os.close();
socket.close();
/*
*服务端核心代码(异常未处理)
*/
//1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
ServerSocket serverSocket=new ServerSocket(6666);
Socket socket=null;
System.out.println("***服务器即将启动,等待客户端的连接***");
//循环监听等待客户端的连接
while(true){
//调用accept()方法开始监听,等待客户端的连接
socket=serverSocket.accept();
//创建一个新的线程,ServerThread是自己写的一个多线程处理类,用于读取和响应客户端
ServerThread serverThread=new ServerThread(socket);
//启动线程
serverThread.start();
System.out.println("客户端的数量:"+count);
InetAddress address=socket.getInetAddress();
System.out.println("当前客户端的IP:"+address.getHostAddress());
}
基于UDP协议的socket通信模型
/*
* 客户端核心代码(异常未处理)
*/
//1.定义服务器的地址、端口号、数据
InetAddress address=InetAddress.getByName("localhost");
int port=8800;
byte[] data="用户名:admin;密码:123".getBytes();
//2.创建数据报,包含发送的数据信息
DatagramPacket packet=new DatagramPacket(data, data.length, address, port);
//3.创建DatagramSocket对象
DatagramSocket socket=new DatagramSocket();
//4.向服务器端发送数据报
socket.send(packet);
/*
* 服务端核心代码(异常未处理)
*/
//1.创建数据报,用于接收服务器端响应的数据
byte[] data2=new byte[1024];
DatagramPacket packet2=new DatagramPacket(data2, data2.length);
//2.接收服务器响应的数据
socket.receive(packet2);
//3.读取数据
String reply=new String(data2, 0, packet2.getLength());
System.out.println("我是客户端,服务器说:"+reply);
//4.关闭资源
socket.close();
5、TCP,UDP的优缺点和应用场景
1、优缺点分析:
TCP的优点:
TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。
TCP的缺点:
TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。也正因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。
UDP的优点:
UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但UDP也是无法避免攻击的,比如:UDP Flood攻击……
UDP的缺点:
不稳定,在数据传递时,如果网络质量不好,就会很容易丢包。
2、应用场景
TCP:
当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。(如HTTP、SMTP、QQ文件传输…)
UDP:
当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快(如QQ语音、QQ信息、QQ视频…)
PS:博文中如有什么不对的地方恳请大家指出,谢谢~