Java TCP可靠传输通信入门案例、Socket网络编程

TCP可靠传输通信入门案例

TCP/IP协议
Transfer Control Protocol ==>传输控制协议

TCP/IP协议的特点

  • 面向连接的协议
  • 只能由客户端主动发送数据给服务器端,服务器端接收到数据之后,可以给客户端响应数据。
  • 通过三次握手建立连接,连接成功形成数据传输通道。
  • 通过四次挥手断开连接
  • 基于IO流进行数据传输
  • 传输数据大小没有限制
  • 因为面向连接的协议,速度慢,但是是可靠的协议。

TCP协议的使用场景

  • 文件上传和下载
  • 邮件发送和接收
  • 远程登录

TCP协议相关的类

  • Socket
    一个该类的对象就代表一个客户端程序。

  • ServerSocket
    一个该类的对象就代表一个服务器端程序。

TCP通信也叫Socket网络编程,只要代码基于socket开发,底层就是基于了可靠传输的TCP通信。

Socket类构造方法

Socket(String host, int port)
 - 根据ip地址字符串和端口号创建客户端Socket对象

 - 注意事项:只要执行该方法,就会立即连接指定的服务器程序,如果连接不成功,则会抛出异常。
如果连接成功,则表示三次握手通过。

Socket类常用方法

outputstream getoutputstream();获得字节输出流对象
Inputstream getInputstream() ;获得字节输入流对象

客户端的开发流程:

  1. 客户端要求请求于服务端的socket管道连接。
  2. 从socket通信管道中得到一个字节输出流
  3. 通过字节输出流给服务端写出数据。

服务端的开发流程:

  1. 注册端口。
  2. 接收客户端的Socket管道连接。
  3. 从socket通信管道中得到一个字节输入流
  4. 从字节输入流中读取客户端发来的数据。
构造器:public ServerSocket(int port)
方法:public Socket accept() :

等待接收一个客户端的Socket管道连接请求, 连接成功返回一个Socket对象。

举例:客户端发送一行数据,服务端接收行数据

import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;

//开发客户端
public class clientDemo1 {
    public static void main(String[] args) throws Exception{
        //1.客户端请求服务端,socket管道连接
        //socket(String host,int port)
        Socket socket = new Socket("127.0.0.1",8888);
        //2.从socket通信管道中得到一个字节输出流
        OutputStream outputStream = socket.getOutputStream();
        //3.把低级的字节输出流包装成高级的打印流
        PrintStream printStream = new PrintStream(outputStream);
        //4.开始发消息出去
        printStream.println("客户端第一次发消息");
        printStream.flush();
        System.out.println("客户端发送完毕");
    }
}

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

/**
 * 1. 注册端口。
 * 2. 接收客户端的Socket管道连接。
 * 3. 从socket通信管道中得到一个字节输入流
 * 4. 从字节输入流中读取客户端发来的数据。
 */
public class serverDemo2 {
    public static void main(String[] args) throws Exception {
        System.out.println("服务端启动");
        //1.注册端口 public ServerSocket(int port)
        ServerSocket serverSocket = new ServerSocket(8888);
        //2.开始接受客户端socket管道
        Socket accept = serverSocket.accept();
        //3.从socket通信管道中得到一个字节输入流
        InputStream inputStream = accept.getInputStream();
        //4.把字节输入流包装成字符输入流
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
        //5.把字符输入流包装成缓冲字符输入流
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        //6.按照行读取消息
        String msg;//读取一行消息
        if((msg = bufferedReader.readLine()) != null){
            System.out.println("收到:"+msg);
        }
    }
}

小结:

  1. 客户端用Socket连接服务端。
  2. 服务端用ServerSocket注册端口,接收客户端的Socket连接。
  3. 通信是很严格的,对方怎么发,你就应该怎么收,对方发多少你就只能收多少。
  4. 实现的面向连接的socket端到端的通信管道,一方如果出现对象,另一方会出现异常。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值