网络编程:socket—基于 TCP 协议编程|学习笔记

简介: 快速学习网络编程:socket—基于 TCP 协议编程

开发者学堂课程【大数据 ZooKeeper 快速入门 网络编程:socket—基于 TCP 协议编程】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/549/detail/7582


网络编程:socket—基于 TCP 协议编程


一、socket—基于 TCP 协议编程

Tcp最大的特点就是在于发送数据的时候不需要打包,需要建立链接,一旦建立链接成功之后就会形成数据传输的通道,就可以在通道中进行输入流和输出流来进行数据的发送和接收。客户端代码实现:客户端中 java 核心 API 叫做 socket,通过socket 构造客户端的 socket 对象,打开 idea 进行代码实现:

首先创建一个包 cn.itcast.socket.tcp

在包中创建客户端中的一个类:TCPSocketClient,Client 主要用于数据的发送。

流程:在客户端即发送数据端,第一步创建 socket 对象,对象是 socket 通信的基石,通过对象来指定发送数据的主机、目的地,通过建立之后,在对象当中形成数据传输的通道,就是所谓的输入流和输出流,在这个流当中进行数据的输入和输出。

代码实现思路:

创建客户端的 socket 服务核心类 Socket

1、在 socket 指定传输数据的目的ip和端口

2通过 socket 建立的通道输出数据

3、释放资源

public class TCPSocketclient {

//首先创建 main 方法,

public static void main(String[] args)throws Exception {

//创建客户端的 socket 服务Socket

//在 socket 指定传输数据的目的 ip 和端口,new 一个 socket 需要输入一些信息,分别是主机 ip(127.0.0.1)和地址(端口12321),这样就完成了客户端 socket 的建立以及端口的指定,发现代码中,直接抛出最大的一个异常 throws Exception

Socket client = new Socket( "127.0.0.1",12321);

//通过 socket 建立的通道输出数据

//取得输出流,写数据,从 client 包中调用 getOutputStream() 进行输出调用,最后封装给 outputstream

Outputstream outputstream = client.getOutputStream();

//通过 write 方法写出数据,这是需要一个 byte 数组,这样就通过 outputStream 完成了对数据的写出

outputStream.write( "hello,this is tcp".getBytes());

//释放资源

client.close();

}

以上完成了对客户端代码的书写,创建一个服务,通过对象获取一个输出流,之后通过写数据即可

服务端实现:

服务端

核心 API:ServerSocket

流程逻辑:

1. 创建 ServerSocket 服务,然后绑定在服务器的 IP 地址和端口

2. 监听连接请求

3. 如果有客户端接受请求,建立了 TCP 连接

4. 获取输入流读取数据,并显示

5. 释放资源

在服务端创建一个了类:TCPSocketServer

public class TCPSocketServer {

//首先创建 main 方法

public static voidmain ( String[]args) throws Exception{

//建立服务端 socket 服务  ServerSocket(注意服务端的核心API:ServerSocket)并且监听本机的一个端口,new 一个 ServerSocket 对象进行绑定本地端口,注意端口与客户端保持一致,若不一致将不能进行链接传输数据,然后进行抛出异常 throws Exception

ServerSocket server = new ServerSocket(12321);

//监听连接阻塞方法  有请求过来  建立连接  返回与之对应的 socket 来  通信,调用 accept(方法),阻塞:程序运行到这将会一直等待,如果没有客户端发送 socket 请求,就会一直停留在这,如果有请求就会进行反应一个请求,放回方法直接是一个 socket,封装给 s,然后由客户端和服务端的 socket 进行通信,ServerSocket 继续保持服务,

Socket  s = server.accept();

//获取输入流读取数据,然后就能写入数据,调用 getInputStream 方法进行输入,接收数据,返回为 Inputstream 类型

Inputstream inputStream = s.getInputStream();

//设置一个 byte 数组1024

Byte[] bys = new byte[1024];

//针对 inputStream 进行读取,调用 read 方法读取数据 bys,把数据存放到 len 中,因为读取的是长度 lenth

int len = inputstream.read (bys);

//sout 打印数据,从bys数组中第一个读取到最后(最大长度)

System.out.println( new String(bys,0,len));

//释放资源,打印完毕后需要进行关闭资源

s.close();

server .close();

}}

以上代码完成,右键进行运行测试:发现堵塞在那没有结束运行

接下来运行客户端程序:

hello,this is tcp

发现已经返回了结果,这样就完成了基于 TCP 协议的传输,重点需要明白协议的特点以及使用哪个 API 作为参数

相关文章
|
2月前
|
监控 负载均衡 安全
WebSocket网络编程深度实践:从协议原理到生产级应用
蒋星熠Jaxonic,技术宇宙中的星际旅人,以代码为舟、算法为帆,探索实时通信的无限可能。本文深入解析WebSocket协议原理、工程实践与架构设计,涵盖握手机制、心跳保活、集群部署、安全防护等核心内容,结合代码示例与架构图,助你构建稳定高效的实时应用,在二进制星河中谱写极客诗篇。
WebSocket网络编程深度实践:从协议原理到生产级应用
|
5月前
|
网络协议 API
区分TCP/IP、HTTP、Socket三者的差异
HTTP关注于应用层的协议规范,而Socket关注于为应用程序提供编程中的网络功能,这些功能本身是建立在底层的TCP/IP协议之上;HTTP是更高层次的抽象,定义了如何包装数据,而TCP/IP定义了如何传送数据,Socket则是两者之间在程序中的桥梁,负责实现细节。在实际应用中,通常HTTP通信也是通过Socket来完成,因为HTTP仅是具体内容的封装形式,而Socket则是传送方式的实现形式。
504 16
|
9月前
|
网络协议 物联网
VB6网络通信软件上位机开发,TCP网络通信,读写数据并处理,完整源码下载
本文介绍使用VB6开发网络通信上位机客户端程序,涵盖Winsock控件的引入与使用,包括连接服务端、发送数据(如通过`Winsock1.SendData`方法)及接收数据(利用`Winsock1_DataArrival`事件)。代码实现TCP网络通信,可读写并处理16进制数据,适用于自动化和工业控制领域。提供完整源码下载,适合学习VB6网络程序开发。 下载链接:[完整源码](http://xzios.cn:86/WJGL/DownLoadDetial?Id=20)
332 12
|
9月前
|
机器学习/深度学习 API Python
Python 高级编程与实战:深入理解网络编程与异步IO
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧、数据科学、机器学习、Web 开发和 API 设计。本文将深入探讨 Python 在网络编程和异步IO中的应用,并通过实战项目帮助你掌握这些技术。
|
12月前
|
负载均衡 网络协议 算法
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
这网络层就像搭积木一样,上层协议都是基于下层协议搭出来的。不管是ping(用了ICMP协议)还是tcp本质上都是基于网络层IP协议的数据包,而到了物理层,都是二进制01串,都走网卡发出去了。 如果网络环境没发生变化,目的地又一样,那按道理说他们走的网络路径应该是一样的,什么情况下会不同呢? 我们就从路由这个话题聊起吧。
304 4
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
|
10月前
|
网络协议 测试技术 Linux
Golang 实现轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库
gev 是一个基于 epoll 和 kqueue 实现的高性能事件循环库,适用于 Linux 和 macOS(Windows 暂不支持)。它支持多核多线程、动态扩容的 Ring Buffer 读写缓冲区、异步读写和 SO_REUSEPORT 端口重用。gev 使用少量 goroutine,监听连接并处理读写事件。性能测试显示其在不同配置下表现优异。安装命令:`go get -u github.com/Allenxuxu/gev`。
226 0
|
12月前
|
网络协议
TCP报文格式全解析:网络小白变高手的必读指南
本文深入解析TCP报文格式,涵盖源端口、目的端口、序号、确认序号、首部长度、标志字段、窗口大小、检验和、紧急指针及选项字段。每个字段的作用和意义详尽说明,帮助理解TCP协议如何确保可靠的数据传输,是互联网通信的基石。通过学习这些内容,读者可以更好地掌握TCP的工作原理及其在网络中的应用。
|
12月前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
272 17
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
228 10
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。

热门文章

最新文章