java网络编程(三)----通信协议之TCP

1. 通信协议

[1] 协议: 约定,就好比我们现在交流时所规定的语言。
[2] TCP/IP协议族使我们现在使用较为广泛的一组协议。
1) 其中较为重要的是TCP/UDP协议

  • TCP: 用户传输协议
  • UDP: 用户数据报协议

2)出名的协议: TCP/IP协议

  • TCP
  • IP: 网络互连协议

[3] TCP与UDP之间的对比

  1. TCP: 打电话
  • 需要连接,稳定
  • 三次握手,四次分手(下面用一段话来总结这个过程)
最少需要三次,保证稳定的连接
   土话       相关的官方语言
A: 你楸啥?    (我想建立连接)
B: 楸你咋地?  (好的可以)	
A: 干一场	  (双方连接)

四次分手
A: 我要走了!          (我要断开连接了)
B: 你真的要走了吗?    (我知道了) 
B: 你真的真的要走了吗?(你断开连接了吗?)
A: 我真的要走了        (我断开连接了)
  • 客户端和服务端的连接
  • 传输完成,释放连接,效率低
  1. UDP: 发短信
  • 不连接,不稳定
  • 客户端与服务端没有明确界限
  • 不管有没有准备好,都可以发送给你
    (就好比导弹攻击;DDOS,洪水攻击)

2. TCP连接的java代码

[1] 客户端
1)连接服务器Socket
2) 发送消息

package com.gs.lesson02;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

//服务端
public class TcpClientDemo01 {
    public static void main(String[] args) {

        Socket socket = null;
        OutputStream os = null;

        try {
            // 1.要知道服务器的地址,端口号
            InetAddress serverIp = InetAddress.getByName("127.0.0.1");
            int port = 9999;
            // 2. 创建一个socket连接
            socket = new Socket(serverIp,port);
            // 3.发送消息
            os = socket.getOutputStream();
            os.write("你好,欢迎学习网络编程".getBytes());

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                //一般标准写法要判断是否为非空才执行关闭操作
                os.close();
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

[2] 服务端

  1. 建立服务端口号 ServerSocket
  2. 等待用户连接 accept
  3. 接收用户的信息
package com.gs.lesson02;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

//服务端
public class TcpServerDemo01 {
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket socket = null;
        InputStream is = null;
        ByteArrayOutputStream baos = null;

        try {
            //1.我得有一个地址
           serverSocket = new ServerSocket(9999);
            // 2.等待客户端连接过来
            socket = serverSocket.accept();
            // 3.读取客户端的信息
            is = socket.getInputStream();
            //通过管道流进行相应的读取
            baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int len;
            while ((len=is.read(buffer))!=-1){
                baos.write(buffer,0,len);
            }
            System.out.println(baos.toString());

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭资源
            try {
                baos.close();
                is.close();
                socket.close();
                serverSocket.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }


}

补充:我们的网络编程开发的形式如下:
服务端:
[1] 自定义Server
[2] Tomcat服务端(基于java后台开发)
客户端:
[1] 自定义Client
[2] 浏览器(Browser)
Tomcat其实就是我们典型的TCP协议===>我们后期的java后台开发其实就是B/S架构

发布了82 篇原创文章 · 获赞 6 · 访问量 6873

猜你喜欢

转载自blog.csdn.net/TheWindOfSon/article/details/105333107