1.桌面应用程序(C-Client/S-Server):
在本机安装,并可以独立启动的程序;
1).单机版:运行时不需要网络。例如:计算器、Word、扫雷......
2).网络版:运行时需要联网。例如:QQ、斗地主、网游......
2.WEB应用程序(B-Browser/S-Server):
程序只需要发布到互联网上的一台服务器上即可,客户端只需要“浏览器”,就可以通过网址访问我们的服务器。例如:京东、淘宝、百度.....
1.IP地址:它是计算机在互联网上的唯一地址;
十进制表示:最小IP : 000.000.000.000
最大IP : 255.255.255.255
二进制表示:最小IP : 00000000.00000000.00000000.00000000
最大IP : 11111111.11111111.11111111.11111111
其中:
1).192.168.xxx.xxx : 不在公网上使用,做内网IP。
2).10.xxx.xxx.xxx : 不在公网上使用。
3).127.0.0.1 : (localhost)不在公网上使用。它是本机IP。
2.端口: 相当于“收信人”
物理端口:网卡口;
逻辑端口:由操作系统维护,就是一组数字,范围:0--65535
任何程序在启动时都可以自行申请端口,如果这个端口没被占用,操作系统就可以分配给你的程序使用。
1).一个程序启动后可以同时占用多个端口;
2).一个端口在某个时间点上不能被多个程序同时占用;
3.协议:双方都能看得懂的语言;
http、ftp、TCP协议、UDP协议...
UDP协议:
1).将数据打包发送;
2).数据包的大小有限制(64K)
3).发送时,可以没有接收端;
例如:共屏软件、视频会议系统
TCP协议:
1).数据不需要打包发送;
2).数据大小没有显示;
3).发送时,必须要有接收端;
例如:飞秋。即时聊天程序...
通信原理:
1. 服务端程序,需要事先启动,等待客户端的连接。
2. 客户端主动连接服务器端,连接成功才能通信。服务端不可以主动连接客户端。
在Java中,提供了两个类用于实现TCP通信程序:
1. 客户端: java.net.Socket 类表示。创建 Socket 对象,向服务端发出连接请求,服务端响应请求,两者建立连接开始
通信。
2. 服务端: java.net.ServerSocket 类表示。创建 ServerSocket 对象,相当于开启一个服务,并等待客户端的连接。
构造方法:
public Socket(String host, int port) :创建套接字对象并将其连接到指定主机上的指定端口号。如果指定的host是null ,
则相当于指定地址为回送地址。
回送地址(127.x.x.x) 是本机回送地址(Loopback Address),主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,立即返回,不进行任何网络传输。
成员方法
public InputStream getInputStream() : 返回此套接字的输入流。
如果此Scoket具有相关联的通道,则生成的InputStream 的所有操作也关联该通道。
关闭生成的InputStream也将关闭相关的Socket。
public OutputStream getOutputStream() : 返回此套接字的输出流。
如果此Scoket具有相关联的通道,则生成的OutputStream 的所有操作也关联该通道。关闭生成的OutputStream也将关闭
相关的Socket。
public void close() :关闭此套接字。一旦一个socket被关闭,它不可再使用。关闭此socket也将关闭相关的
InputStream和OutputStream 。
public void shutdownOutput() : 禁用此套接字的输出流。任何先前写出的数据将被发送,随后终止输出流。
构造方法
public ServerSocket(int port) :使用该构造方法在创建ServerSocket对象时,就可以将其绑定到一个指定的端口号上,
参数port就是端口号。
成员方法
public Socket accept() :侦听并接受连接,返回一个新的Socket对象,用于和客户端实现通信。该方法会一直阻塞直到
建立连接。
TCP发送端通信实现:
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1",9999);
OutputStream out = socket.getOutputStream();
out.write("我发送了一个信息。".getBytes());
System.out.println("客户端发送了一个信息");
socket.close();
}
TCP接收端通信实现:
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("服务器等待连接.....");
Socket socket = serverSocket.accept();
System.out.println("客户端连接成功.....");
InputStream in = socket.getInputStream();
byte[] array = new byte[1024];
int len = in.read(array);
System.out.println("接收到的信息:" + new String(array,0,len));
in.close();
socket.close();
}