1. 网络通信协议
2. 网络编程中两个主要的问题
- 如何准确地定位网络上一台或多台主机;定位主机上特定的应用:IP地址(InetAddress)和端口号
- 找到主机后如何可靠高效的进行数据传播:网络通信协议
3. TCP UDP
协议 | 细节 |
---|---|
TCP | 使用TCP协议前,须先建立TCP连接,形成传输数据通道 传输器,采用三次握手方式,点对点通信,是可靠的 TCP协议进行通信的两个应用进程:客户端、服务端 在连接中可进行大数据量的传输 传输完毕,需释放连接,四次挥手,效率低 |
UDP | 将数据、源、目的封装成数据包,不需要建立连接 每个数据报的大小限制在64K内 发送方不管对方是否准备好,接收方收到也不确认,故是不可靠的 可以广播发送 发送数据结束时无需释放资源,开销小 |
4. 网络编程
4.1 客户端向服务端发送消息,服务端将消息打印在控制台上
测试的时候先启动服务端,再启动客户端
为了让代码的逻辑看的更清楚,方法的异常全部选择抛出,没有捕获,因为涉及到资源的关闭,不建议这样做
import org.junit.Test;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class ClientServer {
@Test
public void client() throws Exception {
InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
Socket socket = new Socket(inetAddress, 9999);
OutputStream out = socket.getOutputStream();
out.write("hello 我是客户端!".getBytes());
out.close();
socket.close();
}
@Test
public void server() throws Exception {
ServerSocket serverSocket = new ServerSocket(9999);
Socket accept = serverSocket.accept();
InputStream in = accept.getInputStream();
byte[] bytes = new byte[1024];
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
int len;
while ((len = in.read(bytes)) != -1) {
byteArray.write(bytes, 0, len);
}
System.out.println("客户端发过来的内容是" + byteArray.toString());
byteArray.close()