1. 网络基础
  2. TCP/IP协议
    IP协议:
    (Internet Protocol)协议是网际层的主要协议,支持网间互连的数据报通信。它提供主要功能有:
    无连接数据报传送
    数据报路由选择和差错控制
  3. IP地址
  4. Socket通信
    两个java应用程序可通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Socket
    Socket通常用来实现client-server连接
    java.net包中包含定义的两个类Socket和ServerSocket,分别用来实现双向连接的client和server端
    建立连接时所需的寻址信息为远程计算机的IP地址和端口号(Port number)
    - 分CP端口 UDP端口 分开的
    - 每一个65536个端口
  5. ip怎么使用 java tcp java tcp/ip_TCP

  6. 左侧为Server端,右侧为client端,端口号指的是server端的端口号,client端也有端口号,但是在实际使用中是随机分配的,
  7. TCP/UDP 通话的两种方式
    TCP(transmission control protocol):是专门设计用于在不可靠的因特网上提供可靠的、端到端的字节流通信的协议。它是一种面向连接的协议。TCP连接是字节流而非报文流。
    UDP(user data protocol):UDP向应用程序提供了一种发送封装的原始IP数据报的方法、并且发送时无需建立连接。是一种不可靠的连接。
    特点:
    TCP先确定建立好连接,才能通话,是可靠的。但是,慢。银行交易,服务器登陆账号
    UDP类似于广播式的说话,发电报,至于对方是否收到不确定,不可靠。但是,快。语音,视频,游戏
  8. 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();
			}
		}
	}
  1. 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();
	}
}
  1. 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的写法:知识点的融汇贯通 + 流的作用