JavaSE进阶——该篇主要讲解Java中的网络编程
网络编程
概述
在企业开发中,程序存在两种结构模型:
- C / S : 客户端/服务端
- B / S : 浏览器/服务端
- 浏览器:是由第三方浏览器厂商已提供了(不需要开发了)
- 服务端:需要开发程序
网络三要素
在网络中想要实现编程,必须有:网络三要素
- IP地址:网络上计算机的唯一标识
- 端口号:计算机中程序的唯一标识(每一个程序都有自己唯一的端口号)
- 通信协议:网络上程序之间交互的规则
网络编程
会使用到java.net包下的AIP
常见通信协议 :
- UDP协议
- 特点:
- 面向无连接协议
- 数据大于限制在64K以内
- 数据不安全,容易丢失
- 传输速度快
- TCP协议:传输控制协议
- 特点:
- 面向有连接协议(利用TCP三次握手机制)
- 数据大小没有限制
- 数据相对安全(相对UDP协议来讲)
- 传输速度慢
TCP通信程序,要求必须有两端程序:
Socket
在Java语言中,想要实现客户端、服务端两个程序之间进行交互,需要依赖:Socket (利用TCP协议)
- 客户端程序:Socket
- 先找到计算机 ==//IP地址==
- 再找到计算机上的服务端程序 ==//端口号==
- 按照TCP协议进行数据发送、接收
- 服务端程序:ServerSocket
java.net.Socket类:客户端
1 2 3 4 5 6
| public Socket(String address , int port)
OutputStream getOutputStream() InputStream getInputStream()
|
1 2 3 4 5 6 7 8 9 10
| Socket socket = new Socket("对方计算机IP地址", "服务端程序端口号");
OutputStream netOut = socket.getOutputStream();
netOut.write("数据".getBytes());
netOut.close(); socket.close();
|
java.net.ServerSocket:服务端
1 2 3 4 5
| public ServerSocket(int port)
public Socket accept();
|
案例一
使用一对一接发数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| package netsocket;
import org.slf4j.Logger; import org.slf4j.LoggerFactory;
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket;
public class ServerDemo2 { private static final Logger LOGGER = LoggerFactory.getLogger("服务端"); public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8888); LOGGER.trace("服务端已启动......."); Socket sever = serverSocket.accept(); LOGGER.trace("已连接客户端:" + sever.getInetAddress().getHostAddress());
InputStream inputStream = sever.getInputStream();
byte[] buf = new byte[1024]; int len = inputStream.read(buf);
String msg = new String(buf, 0, len); System.out.println(msg);
OutputStream outputStream = sever.getOutputStream(); outputStream.write("你好你好".getBytes());
inputStream.close(); outputStream.close(); serverSocket.close(); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| package netsocket;
import org.slf4j.Logger; import org.slf4j.LoggerFactory;
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket;
public class ClientDemo2 { private static final Logger LOGGER = LoggerFactory.getLogger("客户端");
public static void main(String[] args) throws IOException { Socket client = new Socket("127.0.0.1", 8888);
OutputStream outputStream = client.getOutputStream(); outputStream.write("你好啊,我的客户端".getBytes());
InputStream inputStream = client.getInputStream(); byte[] buf = new byte[1024]; int len = inputStream.read(buf); String msg = new String(buf, 0, len); LOGGER.trace("收到客户端数据:" + msg);
inputStream.close(); outputStream.close(); client.close();
} }
|
使用多(并行)对一实现接发
java编程中使用的包:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| java.lang
java.util.集合
java.text.SimpleDateFormat
java.io
java.net
java.sql
javax //扩展包
|