TCP传输控制协议,IP网络互联协议,TCP的三次握手是为了建立连接
TCP,有链接,不会丢包,可以重新传输数据,有序安全;UDP无连接,不保证可靠,可能会丢包
IP地址,唯一标识网络上的计算机,端口号唯一标识计算机中的进程,
Socket(套接字)是IP地址与端口号的组合
Java中的Socket类是网络编程相关的类
ServerSocket类是可以创建服务器的套接字,Socket类是可以创建客户端的套接字
网络架构:B/S架构,浏览器端与服务器,基于浏览器,比如网页版淘宝抖音等
C/S架构,客户端服务器,基于特定客户端,比如下载的淘宝app等
一个简单的网络通信代码
//客户端
public static void main(String[] args) throws UnknownHostException, IOException {
// 创建客户端对象,并根据主机与端口链接服务端
Socket s = new Socket("127.0.0.1", 8848);
// 给服务端消息
PrintWriter pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
// 接收服务端发送来的消息
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream(), "UTF-8"));
String msg = null;
Scanner scanner = new Scanner(System.in);
while (!"exit".equals((msg = scanner.nextLine()))) {
// 发送给服务端键盘输入的信息
pw.println(msg);
pw.flush();
// 打印服务端的消息
System.out.println(br.readLine());
}
pw.close();
br.close();
s.close();
System.out.println("客户端关闭");
}
服务端
// 创建服务器对象并指定端口,端口需要未被占用
ServerSocket ss = new ServerSocket(8848);
// 等待接收客户端的消息,会一直等待,直到接收到链接对象
Socket s = ss.accept();
System.out.println("客户端链接成功");
// 返回给客户端消息
PrintWriter pw=new PrintWriter(new OutputStreamWriter(s.getOutputStream(),"UTF-8"));
// 获取客户端的消息,获取客户端输入流并转为缓存流
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream() ));
Scanner scanner=new Scanner(System.in);
String input=null;
System.out.println(br.readLine());
while (!"退出".equals((input=scanner.nextLine()))) {
//发送输入消息
pw.println(input);
pw.flush();
System.out.println(br.readLine());
// 打印客户端发送的消息
}
pw.close();
br.close();
ss.close();
System.out.println("服务器已关闭");
易出现的错误
端口号被占用
服务器没有启动,或者IP地址或端口号没对应上写错了
待补充。。。。