网络编程: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 作为参数

相关文章
|
1月前
|
监控 安全
公司上网监控:Mercury 在网络监控高级逻辑编程中的应用
在数字化办公环境中,公司对员工上网行为的监控至关重要。Mercury 作为一种强大的编程工具,展示了在公司上网监控领域的独特优势。本文介绍了使用 Mercury 实现网络连接监听、数据解析和日志记录的功能,帮助公司确保信息安全和工作效率。
96 51
|
29天前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
29 1
|
1月前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
51 13
|
1月前
|
Kubernetes 网络协议 Python
Python网络编程:从Socket到Web应用
在信息时代,网络编程是软件开发的重要组成部分。Python作为多用途编程语言,提供了从Socket编程到Web应用开发的强大支持。本文将从基础的Socket编程入手,逐步深入到复杂的Web应用开发,涵盖Flask、Django等框架的应用,以及异步Web编程和微服务架构。通过本文,读者将全面了解Python在网络编程领域的应用。
35 1
|
2月前
|
Java
[Java]Socket套接字(网络编程入门)
本文介绍了基于Java Socket实现的一对一和多对多聊天模式。一对一模式通过Server和Client类实现简单的消息收发;多对多模式则通过Server类维护客户端集合,并使用多线程实现实时消息广播。文章旨在帮助读者理解Socket的基本原理和应用。
31 1
|
2月前
|
消息中间件 监控 网络协议
Python中的Socket魔法:如何利用socket模块构建强大的网络通信
本文介绍了Python的`socket`模块,讲解了其基本概念、语法和使用方法。通过简单的TCP服务器和客户端示例,展示了如何创建、绑定、监听、接受连接及发送/接收数据。进一步探讨了多用户聊天室的实现,并介绍了非阻塞IO和多路复用技术以提高并发处理能力。最后,讨论了`socket`模块在现代网络编程中的应用及其与其他通信方式的关系。
233 3
|
2月前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【10月更文挑战第10天】网络协议定义了机器间通信的标准格式,确保信息准确无损地传输。主要分为两种模型:OSI七层模型与TCP/IP模型。
|
2月前
|
网络协议 测试技术 网络安全
Python编程-Socket网络编程
Python编程-Socket网络编程
30 0
|
3月前
|
网络协议
关于套接字socket的网络通信。&聊天系统 聊天软件
关于套接字socket的网络通信。&聊天系统 聊天软件
|
5月前
|
网络协议 安全 Java
Java中的网络编程:Socket编程详解
Java中的网络编程:Socket编程详解
下一篇
DataWorks