1.概述
- ip+端口号
Java中以InetAddress代表
实例化:getByName()
getLocalHostAddress()
两常用方法:getHostName()
getHostAddress()
端口号:0-1023公认
1024-49151注册端口
49151-65535随机端口
端口加ip组合成一个套接字:Socket
- TCP/IP协议
TCP三次握手
可靠连接
关闭连接,四次挥手
UDP不需建立连接,实时性好
2.TCP编程


- 服务端客户端互传文件: ```java import org.junit.jupiter.api.Test;
import java.io.*; import java.net.ServerSocket; import java.net.Socket;
/**
- @author Created by MrNnobody
- @date 2021/5/31 20:41
Welcome to browse and correct */ public class TCPTest {
@Test public void client() throws IOException {
Socket socket = new Socket("127.0.0.1",8090);OutputStream os = socket.getOutputStream();FileInputStream fis = new FileInputStream(new File("你很棒.jpg"));byte[] buffer = new byte[1024];int len;while((len = fis.read(buffer)) != -1){os.write(buffer,0,len);}//关闭数据输出,否则服务器持续等待接收socket.shutdownOutput();//接收来自服务器的数据InputStream is = socket.getInputStream();ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer1 = new byte[1024];int len1;while ((len1 = is.read(buffer1)) != -1) {baos.write(buffer1,0,len1);}System.out.println(baos.toString());socket.close();os.close();fis.close();
}
@Test public void server() throws IOException {
ServerSocket serverSocket = new ServerSocket(8090); Socket socket = serverSocket.accept(); InputStream inputStream = socket.getInputStream(); FileOutputStream fos = new FileOutputStream("你很棒2.jpg"); byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) != -1){ fos.write(buffer,0,len); } System.out.println("图片传输完成"); OutputStream os = socket.getOutputStream(); os.write("小伙子,你很棒!".getBytes());
serverSocket.close();
socket.close();
inputStream.close();
fos.close();
}
}
UDP编程
- UDP通过DatagramSocket套接字发送和接收数据
UDP每个数据报(DatagramPacket)都封装了IP和端口号,因此无需建立连接






