网络编程(五)Socket通信

在网络编程(四)中学习了udp通信  udp通信是非面向连接的 效率高但不安全的通信

而socket通信是基于tcp协议,建立稳定连接的点对点的通信 比如打电话

    实时、快速、安全性高、占用系统资源高、效率低

“请求-响应”模式

在udp通信中客户端和服务器端都使用到的类有DatagramSocket和DatagramPacket进行通信

在tcp中 我们使用的类有Socket和ServerSocket

Socket:发送TCP消息

ServerSocket:创建 服务器

套接字:是一种进程间的数据交换机制。这些进程既可以在同一机器上,也可以在通过网络连接的不同机器上。换句话说,套接字起到通信端点的作用。单个套接字是一个端点,而一对套接字则构成一个双向通信信道,使非关联进程可以在本地或网络进行数据交换。一旦建立套接字连接,数据即可在相同或不同的系统中双向或单向发送,直到其中一个端点关闭连接。

总结:

面向连接:请求 - 响应 request - response

 

ServerSocket

 

此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。

服务器套接字的实际工作由 SocketImpl 类的实例执行。应用程序可以更改创建套接字实现的套接字工厂来配置它自身,从而创建适合本地防火墙的套接字。 

网络编程(五)Socket通信_第1张图片

 

 

 

Socket

 

此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。

套接字的实际工作由 SocketImpl 类的实例执行。应用程序通过更改创建套接字实现的套接字工厂可以配置它自身,以创建适合本地防火墙的套接字。

网络编程(五)Socket通信_第2张图片

 

客户端:

 

创建客户端 指定服务器及端口 此时就在连接

利用输入流 读取从客户端输出的数据

服务器端:

创建服务器,指定端口

接收客户端连接 阻塞式 该socket和客户端的socket是同一个socket

发送数据

第一种输出方式 输出流

 

一个例子:实现服务器端向客户端发送数据,客户端接收并输出

服务器端:

public static void main(String[] args) throws IOException {

//创建服务器,指定端口
ServerSocket server = new ServerSocket(8888);
//接收客户端连接 阻塞式 该socket和客户端的socket是同一个socket
Socket socket = server.accept();

//发送数据
String msg = "欢迎使用 ";
//第一种输出方式 输出流1
OutputStream os = socket.getOutputStream();
OutputStreamWriter ow = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(ow);
bw.write(msg);
bw.newLine();
bw.flush();

//第二种输出方式
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF(msg);
dos.flush();
}

客户端:

public static void main(String[] args) throws UnknownHostException, IOException {
//创建客户端 指定服务器及端口 此时就在连接
Socket socket = new Socket("localhost",8888);
//第一种 输入流接收数据
InputStream is = socket.getInputStream();
InputStreamReader ir = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(ir);

String res = reader.readLine();
System.out.println(res);
//第二种 输入流接收数据
DataInputStream dis = new DataInputStream(is);
String res2 = dis.readUTF();
System.out.println(res2);

}

先启动服务器端,再启动客户端,不然会报错,因为是面向连接的。而udp则不会,只会让数据丢失,不会报错,因为是非面向连接的

输出:

欢迎使用 
欢迎使用 

 

你可能感兴趣的:(网络编程)