**
首先我们要知道服务器客户端的概念。
客户端-服务器(Client/Server)结构,简称C/S结构,是一种软件系统体系结构,它把客户端 (Client) 与服务器 (Server) 区分开来,每一个客户端软件的实例都可以向一个服务器或应用程序服务器发出请求。由美国Borland公司最早研发,目前最流行的两大主流软件体系结构之一,另一个是美国微软公司研发的浏览器-服务器(Browser/Server,B/S)结构。服务器端一般使用高性能的计算机,并配合Oracle、Sybase等大型数据库;客户端需要安装专门的软件。
socket通信模型
客户端套接字是Socket,绑定了服务器的IP地址和端口号。
服务器套接字是ServerSocket,绑定了端口号。
然后通过TCP或者UDP协议通过io流进行通信。
几个名词解释
socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。所以可以把客户端/服务器看作一种特殊的文件,客户端/服务器从流中读、写数据可以看成是从文件中“读、写”数据。
ip地址,每一个网络、每一台主机都具有唯一的ip地址,可以把它看成是电话通信中的电话号码,电话号码可以唯一指定是那台电话。
端口:可以唯一指定是哪个应用,范围0-65535,1024前一般为系统应用所使用。
TCP协议,一种传输协议,与UDP区别是它必须建立连接才可通信,可从accept方法看出,以数据流的方式传输数据,深层原理不太清楚。
UDP协议,传输协议,不必建立连接,以数据包的形式传输数据,数据容易丢失。
TCP协议通信-代码流程
客户端:
1、创建套接字(指定ip和端口)
2、创建输出流OutputStream对象,发送数据
3、创建输入流InputStream对象,接收服务器发来的数据
4、释放资源
服务器:
1、创建套接字(指定端口)
2、创建输入流InputStream对象,接收客户端发送的信息
3、创建输出流OutputStream对象,发送数据到客户端
4、释放资源
到此,我们就可以写一个简单的客户端和服务器通信的简单代码了。
简单程序1
客户端
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class Client{
public static void main(String[] args) throws IOException {
// 创建Socket套接字对象
Socket s = new Socket("localhost", 8888);
// 获取输出流对象,写数据
OutputStream os = s.getOutputStream();
os.write("hello,世界".getBytes());
// 释放资源
s.close();
}
}
服务器
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server{
public static void main(String[] args) throws IOException {
// 创建接收端的套接字对象
ServerSocket ss = new ServerSocket(8888);
// 监听客户端连接,返回相应的Socket对象
Socket s = ss.accept();
// 获取输入流对象,从输入流中获取数据
InputStream is = s.getInputStream();
byte[] bys = new byte[1024];
int