一.简述
- 编程概述:就是用来实现网络互联的不同计算机上运行的程序间可以进行数据交换
- 网络模型:OSI七层模型和TCP/IP四层模型
- 通信三要素:IP地址、端口号、协议
- Socket:Socket就是为网络编程提供的一种机制;通信两端都有Socket;网络通信其实就 是;Socket之间的通信;数据在两个Socket间通过IO传输。
- TCP传输:(Transmission Control Protocol,传输控制协议) 是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP 层是位于 IP 层之上,应用层之下的中间层。TCP 保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称 TCP / IP。
二.编程步骤
- 使用Socket和ServerSocket建立客户端和服务器端
- 通过accept()方法建立连接后(这里是与UDP最大的不同),通过Socket中的IO流进行数据的传输
- 关闭Socket
- 客户端和服务器端是两个独立的应用程序
三.简单实例
先运行服务器端,在运行客户端。
import java.net.*;
import java.io.*;
public class Main_10_25_Server {
public static void main(String[] args) throws Exception{
try {//服务端
ServerSocket ss = new ServerSocket(8888);
System.out.println("启动服务器....");
Socket s = ss.accept();//进行TCP的连接(UDP不需要)
System.out.println("客户端:"+s.getInetAddress().getLocalHost()+"已连接到服务器");
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//读取客户端发送来的消息
String mess = br.readLine();
System.out.println("客户端:"+mess);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bw.write(mess+"\n");
bw.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.net.*;
import java.io.*;
public class Main_10_25_Client {
public static void main(String[] args) throws Exception{
try {//客户端
Socket s = new Socket("127.0.0.1",8888);
//构建IO
InputStream is = s.getInputStream();
OutputStream os = s.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
//向服务器端发送一条消息
bw.write("测试客户端和服务器通信,服务器接收到消息返回到客户端\n");
bw.flush();
//读取服务器返回的消息
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String mess = br.readLine();
System.out.println("服务器:"+mess);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行截图: