JAVASE02---Unit06: TCP通信 、 UDP通信

Java的网络编程:小程序能实现记时的聊天室

网络通讯的底层协议有两个:
一、TCP协议:
可靠的传输协议。长连接,一直连着发送。一发一回应。弊端:啰嗦,占用带宽高,传输速度慢!

二、UDP协议
不可靠传输协议。简洁,对方爱收不收,草率。快,不废话不罗嗦。无所谓!(网络上UDP协议用的更多)
例如:网游、视频传输、语言(卡了,丢包了。哈哈哈哈o(^▽^)o)
只说一便,不重复,不罗嗦。


C-S:客户端对服务端(用户电脑上会有大量的客户端)
--->浏览器(统一客户端)

B-S:浏览器对服务端(算C-S的一种)

手机又回到了C-S,大众的东西就不能做的很个性。

QQ的浏览器版就很土。

java中就主要讲TCP协议了,来实现聊天室。

java封装的好处,帮你屏蔽底层复杂的事情。上层公开出一个非常简洁的可调用的技术。
例如,开车就只要会挂档和方向盘、油门,就可开车。底层发动机怎么运行不需要。


Socket:套接字(插座)
电话,无线电通讯

***********************************************************************************

先启动服务端,再启动客户端。

怎么看客户端的输出?
在控制台console右边有个小电脑图标,下拉框,可切换。
快速切换就直接点图标。

以上是自己和自己连。
下面是两个人互相连。
知道对方的IP地址是多少?

windows:输入cmd--->命令提示符。
再输入---> ipconfig

linux:打开终端。
再输入---> /sbin/ifconfig

**********************************************************************************
**********************************************************************************
package day11;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
 /**
  * java.net.ServerSocket
  * 运行在服务端的Socket,主要有两个作用:
  * 1:向操作系统申请服务端口,客户端就是通过这个端口找到服务端应用程序的
  * 2:监听服务端口,当客户端实例化Socket并通过ServerSocket服务端口发起连接时,
  *   ServerSocket就能感知到并实例化一个Socket与该客户端通讯。
  */
 private ServerSocket server;
 public Server(){
  try {
   /**
    * 实例化ServerSocket的同时指定服务端口
    * 该端口不能与操作系统上其他应用程序已经申请的端口冲突,否则实例化失败,
    * 抛出地址被占用的异常。
    */
   server= new ServerSocket(8088);
  } catch (Exception e) {
   
  }
 }
 public void start(){
  try {
   /*
    * ServerSocket提供方法
    * Socket accept()
    * 该方法是一个阻塞方法,作用是监听服务端口,直到一个客户端连接过来为止,
    * 然后返回一个Socket实例,通过该Socket就可以与刚连接的客户端交互数据了。
    */
   System.out.println("等待客户端连接...");
   Socket socket= server.accept();
   System.out.println("一个客户端连接了!");
   /*
    * Socket提供了方法:
    * InputStream getInputStream()
    * 通过该输入流可以读取远端计算机发送过来的消息。
    */
   InputStream in= socket.getInputStream();
   InputStreamReader isr= new InputStreamReader(in,"UTF-8");
   BufferedReader br= new BufferedReader(isr);
   String message= br.readLine();
   System.out.println("客户端说:"+message);
   
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 public static void main(String[] args) {
  try {
   Server server= new Server();
   server.start();
  } catch (Exception e) {
   e.printStackTrace(); 
  }

 }

}


**********************************************************************************
**********************************************************************************
package day11;

import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

/**
 * 聊天室客户端
 * @author Daisy.yang
 *
 */
public class Client {
 /*
  *java.net.Socket
  *Socket封装了TCP协议,使用它可以进行TCP通讯。
  */
 private Socket socket;
 /**
  * 构造方法,用来初始化客户端
  */
 public Client(){
  try {
   /*
    * 实例化Socket时需要传入两个参数:
    * 1:服务端计算机的IP地址,通过它可以找到网络上的服务端计算机。
    * 2:服务端口,该端口是服务端程序启动后向它的计算机申请的,
    *    我们通过这个端口就可以找到运行服务端计算机上的这个服务端
    *    应用程序了。
    *   
    *  而且实例化Socket过的程序就是连接服务端的过程,
    *  在实例化时就会按照给定的地址与端口进行网络连接,
    *  若服务端没有响应,这里会抛出异常。
    * 
    *  localhost:表示本机地址,连接本机。
    *  127.0.0.1
    *  或者看自己的IP地址
    */
   System.out.println("正在连接服务端...");
   socket= new Socket("localhost",8088);
   System.out.println("已连接!");
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 /**
  * 开始客户端工作的方法
  */
 public void start(){
  try {
   /*
    * Socket提供方法:
    * OutputStream getOutputStream()
    * 该方法会获取一个输出流,通过该流写出的数据会发给远端计算机
    * 对于客户端这边而言,远端就是服务端。
    */
   OutputStream out= socket.getOutputStream();
   OutputStreamWriter osw= new OutputStreamWriter(out,"UTF-8");
   PrintWriter pw= new PrintWriter(osw);
   pw.println("Hello!服务端!");
   pw.flush();
   
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
 public static void main(String[] args) {
  try {
   Client client = new Client();
   client.start();
   
  } catch (Exception e) {
   e.printStackTrace();   
  }
 }

}


**********************************************************************************

原文地址:https://www.cnblogs.com/sneg/p/7804661.html