记一次TCP通信中第一次握手的初尝试(实现语言:java)

(注:新手没有学过太多基础知识,以下内容可能会有很多不成熟甚至错误的内容,还请大佬们多多指教)

基础知识一:TCP通信协议原理

TCP:传输控制协议 (Transmission Control Protocol)。TCP协议是面向连接的通信协议,即传输数据之前,
在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。
三次握手:TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可
靠。
第一次握手,客户端向服务器端发出连接请求,等待服务器确认。
第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求。
第三次握手,客户端再次向服务器端发送确认信息,确认连接。

基础知识二: java中的相关类

  1. 客户端: java.net.Socket 类表示。创建 Socket 对象,向服务端发出连接请求,服务端响应请求,两者建
    立连接开始通信。
    构造方法:public Socket(String host, int port) :创建套接字对象并将其连接到指定主机上的指定端口号。
    注意:如果指定的host是null ,则相当于指定地址为回送地址。
    (这解释了为什么代码完成后要先运行服务端部分,再运行客户端部分,否则会报错)
    成员方法:public InputStream getInputStream() :
    public OutputStream getOutputStream() :
    public void close() :关闭此套接字。
    一旦一个socket被关闭,它不可再使用。
    关闭此socket也将关闭相关的InputStream和OutputStream 。
    public void shutdownOutput() : 禁用此套接字的输出流。
    任何先前写出的数据将被发送,随后终止输出流。
  2. 服务端: java.net.ServerSocket 类表示。创建 ServerSocket 对象,相当于开启一个服务,并等待客户端
    的连接。
    构造方法
    public ServerSocket(int port) :
    成员方法
    public Socket accept() :

代码实现

关于服务端

package cn.java.Aboutserver;
//这是服务端
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class MyServersocket {
    public static void main(String[] args) throws IOException {
        //创建服务端Serversocket类对象
        ServerSocket server=new ServerSocket(6666);
        System.out.println("服务端启动,等待连接");
        //接收数据并返回一个Socket对象
        Socket ss=server.accept();
        //获取客户端发来的数据
InputStream data=ss.getInputStream();
//注:后面几步只是为了把数据打印出来便于印证数据传输成功
        //创建可存储数据的数组
        byte[]arr=new byte[1024];
        int len=data.read(arr);
        //用String解析数组,打印字符串信息
        String context=new String(arr,0,len);
//将改数据打印出来
        System.out.println(context);
     //回写数据
        OutputStream hh=ss.getOutputStream();
        hh.write("nice to meet you,I have received your letter".getBytes());
        //至此,一次握手已完成
//最后记得关闭Socket and InputStream and OutputStream
        server.close();
        data.close();
        hh.close();
    }
}

关于客户端

package cn.java.Aboutserver;
//这是客户端,打错类名了
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class Myserver{
    public static void main(String[] args) throws IOException {
        //创建客户端对象,(ip,port)确认连接到哪里
        Socket client=new Socket("localhost",6666);
        //创建输出流,发送请求
        OutputStream kk=client.getOutputStream();
        kk.write("hello,nice to meet you!".getBytes());
        System.out.println("客户端创建成功,已发送请求,等待连接");
//创建输入流对象,接收回写数据
        InputStream qq=client.getInputStream();
        //后面几步数据都是为了将接受到的数据显示在控制台上便于验证
        byte[]backarr=new byte[1024];
        int len=qq.read(backarr);
        //用String解析数组,打印字符串信息
        String context=new String(backarr,0,len);
//将改数据打印出来
        System.out.println(context);
        //最后记得关闭Socket and InputStream and OutputStream
        client.close();
        kk.close();
        qq.close();

    }
}

效果:
在这里插入图片描述
在这里插入图片描述

感谢你能看到这里!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值