网络编程|套接字

STM32 ADC+DMA实战:手把手教你驱动XGZP6847A压力传感器(附完整代码) 本文详细介绍了如何使用STM32的ADC和DMA外设驱动XGZP6847A压力传感器,包括硬件连接、ADC配置、DMA高效传输实现以及数据处理与校准方法。通过实战案例和完整代码,帮助开发者快速掌握高精度压力数据采集技术,适用于工业控制和医疗设备等领域。 阅读详情

一、套接字概述

1、套接字 ----> IP地址+端口
2、端口号
  • 由16位二进制数表示,即十进制数范围为0~65535。
  • 0~1023端口为公认端口或熟知端口。
  • 如果选择1024以后的端口,注意不要和其他的应用程序端口产生冲突。
3、分类
①客户端套接字
  • 发出连接请求的套接字
  • 需要指明连接端的IP和端口
  • java.net.Socket类
②服务器端套接字
  • 接受连接请求的套接字
  • 需要指明监听的端口号
  • java.net.ServeSocket类
4、 采用TCP进行通信,封装了底层网络的通信细节,使得网络编程变得简单。

二、客户端套接字

1、编程步骤
  • ①建立网络连接。需要指出服务器端的IP地址和端口号。
  • ②连接成功后,就可以实现数据交互。
    数据交互时按照请求—响应模型由客户端向服务器端发送请求,服务器端根据请求内容进行处理,并将响应结果返回给客户端。
    注:数据交互的过程可以进行多次,但是每次都要按照请求—响应模型进行。
  • ③数据交互结束后。关闭网络连接,释放占用的资源(如端口、内存等),结束客户端程序。
2、构造方法
public Socket(String host,int post) throws UnknownHostException,IOException
public Socket(InetAddress address,int port) throws IOException
3、调用构造方法,创建Socket对象
Socket socket1 = new Socket("www.baidu.com",80);
Socket socket2 = new Socket("127.0.0.1",8000);

socket1实现了连接www.baidu.com这台主机的80端口
socket2实现了连接127.0.0.1这台主机的8000端口

4、数据交互
①交互操作通过输入流/输出流完成
  • 发送的请求数据写入到连接对象的输出流中
public OutputStream getOutputStream() throws IOException
  • 从连接对象的输入流中读取数据
public InputStream getInputStream() throws IOException
  • 获取输入流/输出流的格式
OutputStream out  =socket1.getOutputStream(); //建立socket1的输出流对象
InputStream in = socket2.getInputStream(); //建立socket2的输入流对象
  • 建立完输入输出流对象后,可以按照I/O流的方式进行数据交互,而且可以通过流的嵌套结构将基本流转换成需要的装饰流,从而方便操作。
②关闭网络连接
socket1.close();

三、服务器端套接字

1、编程步骤
  • ①监听固定的端口。(服务器端是处于被动等待连接的状态,不需要发起连接)
  • ②当服务器端监听到客户端的连接请求后,就可以与客户端建立一个网络连接。
    在这个连接中,包含客户端的相关信息,如IP地址等。
  • 连接建立成功后,双方可以进行数据交互了。
  • 数据交互结束后,要关闭服务器端,释放占用的资源。
2、采用多线程机制

为解决多用户响应问题,一般采用多线程机制。当获得一个连接后即启动一个专门线程进行处理,主线程继续监听下一个连接请求。

3、构造方法
public ServerSocket(int port) throws IOException
  • 该方法创建绑定到特定端口的服务器套接字对象。
  • port:连接指定的端口(如果为0,表示使用任何空闲的端口)

连接请求队列:

在建立连接时,会创建一个连接请求队列,表示可以连接的最大请求数(默认为50)。
如果队列满时再收到连接请求,则拒绝该连接。
(下面的构造方法可以解决该问题)

public ServerSocket(int port,int backlog) throws IOException
  • 如果backlog的值小于等于0,则使用默认值
4、连接监听
public Socket accept() throws IOException

此方法监听并接收到此套接字的连接,则其在连接传入之前一直阻塞。

四、实例

实现一次数据交互
/**
 * 向服务器端发送一个问候字符串:“你好,我是客户机A”,并显示服务器端响应的字符串信息:“你好,我是服务器B”。
 * 数据交互只进行一次
 */
import java.net.Socket;
import java.io.*;

public class Example1 {
	public static void main(String[] args) {
		Socket client_socket = null;
		DataInputStream in = null;
		DataOutputStream out = null;
		String ip = "127.0.0.1";// 服务器IP
		int port = 5050;// 服务器端口

		try {
			client_socket = new Socket(ip, port);// 与服务器创建连接
			in = new DataInputStream(client_socket.getInputStream());// 创建输入流
			out = new DataOutputStream(client_socket.getOutputStream());// 创建输出流
			out.writeUTF("你好,我是客户机A");// 向服务器端发送消息 [writeUTF---->将一个字符串写入基础输出流]
			System.out.println("客户机启动,向服务器发送消息:你好,我是客户机A");
			String str = in.readUTF();// 等待读取服务器端响应的信息,进入阻塞状态
			System.out.println("服务器端的响应信息:" + str);

		} catch (Exception e) {
			System.out.println(e);
		} finally {
			try {//关闭网络连接
				in.close();
				out.close();
				client_socket.close();
			} catch (Exception e) {
			}
		}
	}
}

/**
 * 作为上例的服务器端程序,该程序监听来自客户端的连接请求,显示收到的客户端字符串内容:“你好,我是客户机A”,并回送响应的字符串信息:“你好,我是服务器B”。
 * 数据交互只进行一次。
 */
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Example2 {
	public static void main(String[] args) {
		ServerSocket server_client = null;
		Socket socket = null;
		DataInputStream in = null;
		DataOutputStream out = null;
		int port = 5050;
		
		try {
			server_client = new ServerSocket(port);//创建绑定端口的服务器端socket
		}catch(IOException e) {
			System.out.println(e);
		}
		
		try {
			System.out.println("服务器启动!");
			
			//监听并接收到此套接字的连接。此方法在连接传入之前处于阻塞状态
			socket = server_client.accept();
			in = new DataInputStream(socket.getInputStream());//创建输入流
			out = new DataOutputStream(socket.getOutputStream());//创建输出流
			String str = in.readUTF();//从输入流读取字符串,读取结束之前处于阻塞状态
			System.out.println("客户机发送过来的信息是:" + str);
			out.writeUTF("你好,我是服务器B");//向输入流写入字符串
		}catch(IOException e) {
			System.out.println(e);
		}finally {
			try {//关闭网络连接
				out.close();
				in.close();
				server_client.close();
			}catch(IOException e) {
				System.out.println(e);
			}
		}
	}
}

有两个类,需要先执行Example2类,再执行Example1类。
Example1执行后:
在这里插入图片描述

GPU 资源池化云平台解决方案​ 定义与特点Kubernetes是一个开源的容器编排和管理平台,通过提供自动化和声明式的方式来部署、扩展、维护和运行应用程序。它支持跨多个主机和集群部署容器,确保应用程序的高可用性和可扩展性。Kubernetes提供了丰富的功能和插件,允许用户根据自己的需求进行定制和扩展。架构与组件控制平面(Control Plane):负责集群的决策(如调度)和集群状态的检测与响应。 阅读详情

相关推荐

用Multisim复刻经典收音机:从零搭建超外差中波调幅接收机(附仿真源文件)

本文详细介绍了如何使用Multisim软件从零搭建超外差中波调幅接收机,复刻经典收音机的设计过程。通过模块化搭建、稳定性优化和增益分配等实战指南,帮助读者掌握超外差架构的核心技术,并附赠仿真源文件供实践参考。

weixin_28744423的博客 473

套接字

套接字(socket) 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。 传输层实现端到端的通信,因此,每一个传输层连接有两个端点。传输层连接的端点叫做套接字(socket)。所谓套接字,实际上是一个通信端点,每个套接字都...

zhuxuerong的博客 773

H.264 Profile与Level详解:如何为不同应用场景选择合适的编码配置

本文深入解析了H.264编码标准中的Profile与Level概念,指导开发者如何为不同应用场景选择合适的配置。文章对比了Baseline、Main和High三大Profile的特性与适用场景,并解释了Level如何限定视频的分辨率、帧率与码率上限。通过实战指南,帮助读者在视频通话、在线点播和专业制作等场景中,平衡画质、兼容性与性能,实现高效编码。

rgv2345678的博客 238

LINUX TCP套接字详细配置

提高服务器的负载能力,是一个永恒的话题。在一台服务器CPU和内存资源额定有限的情况下,最大的压榨服务器的性能,是最终的目的。要提高 Linux系统下的负载能力,可以先启用Apache的Worker模式,来提高单位时间内的并发量。但是即使这么做了,当网站发展起来之后,连接数过多 的问题就会日益明显。在节省成本的情况下,可以考虑修改Linux的内核TCP/IP参数,来最大的压榨服务器的性能。当然,如果通过修改内核参数也无法 解决的负载问题,也只能考虑升级服务器了,这是硬件所限,没有办法的事。 Linux系统下,

qq_17321007的博客 1136

【Lammps】MS将cif通过msi2lmp.exe转为data文件

在Materials Studio中打开cif文件,在Modules工具行选择Forcite>calculation>Energy中选用cvff力场,点击more,不要运行run,在more中取消勾选calculate automatically,点击calculate,然后叉掉后在file>export导出car文件,同步生成了mdf文件。对于MS中没有的立场,选择之后点calculate会报错,右键选择label,然后根据Forcite选择原子,会发现有力场的有标号,没有力场的MS没有对选择标号。

zhangguoliang624的博客 3673

深入解析“PROJ: proj_create_from_database: Cannot find proj.db”错误:从环境配置到打包实战

本文深入解析了“PROJ: proj_create_from_database: Cannot find proj.db”错误的根源与解决方案,涵盖环境配置、PyInstaller打包及跨平台兼容性处理。通过详细分析PROJ库路径问题及GDAL依赖关系,提供动态路径设置、资源文件打包等实战技巧,帮助开发者高效解决地理数据处理中的常见错误。

weixin_29074409的博客 444

IP地址和端口号

IP地址和端口号 InetAddress类

weixin_51992178的博客 4651

TI 实时操作系统SYS/BIOS使用总结

1:概述: SYS/BIOS 是一个可扩展的实时的操作系统。具有非常快速的响应时间(在中断和任务切换时达到较短的延迟),响应时间的确定性,强壮的抢占系统,优化的内存分配和堆栈管理(尽量少的消耗和碎片)。能够实现系统的模块化并可裁剪。 最大的特点就是:实时。 2:XDCtools: XDCtools 是SYS/BIOS引用的一种实时的软件组件技术(RTSC),它包括一些有用的工具,标准的AP

带头奋青的博客 5万+

Linux_网络套接字(C++_udp服务器,端口号,socket通信,网络字节序,sockaddr通用类型)

文章目录1.端口号(port)2.网络字节序3.sockaddr通用类型4.套接字系列函数socket函数创建套接字(sys/types.h sys/socket.h)bind绑定端口与ip(sys/types.h sys/socket.h)recvfrom函数读取网络数据(sys/socket.h sys/types.h)sendto函数发送数据到网络中5.udp实现服务端文件回显客户端服务端客户端本地测试6.代码位置 1.端口号(port) 端口号是一个2字节16位整数。任何网络数据通信,必须要通过端口

dodamce的博客 1711

管理信息系统(MIS)设计

一名读者可以借阅多本图书,而一本图书也可以被不同的读者借阅,所以读者与图书之间存在着多对多的借阅关系,读者与图书之间存在着多对多的联系,即m:n的联系。每一种图书属于一种图书类型,而一种图书类型可以包含很多本图书,因此可以得到图书类型与图书之间也存在着一种一对多的联系,即图书类型与图书是1:n的联系。系统应该实现以下功能:图书管理员可以维护图书信息,包括增加新书、修改图书信息、办理图书借阅登记、图书归还登记、过期图书处理、丢失图书处理及读者借阅证件信息的维护等;

m0_69718745的博客 2476

Couldn‘t agree a key exchange algorithm(available:curve25519-sha256,curve25519-sha256@libssh.org解决方案

本文主要介绍了Couldn’t agree a key exchange algorithm(available:curve25519-sha256,curve25519-sha256@libssh.org解决方案,希望能对使用winscp的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 方案一 2.2 方案二

weixin_43178406的博客 4万+

IP地址&端口号

一、IP地址 1.什么是IP地址? IP地址是连接在因特网上的主机的标识符 2.IP协议的分类? IP协议有两个版本,分别是IPV4,IPV6 ps:基本上提到IP地址时,不特指的话,都是指IPV4 3.IP地址的大小、格式、分类? (1)IP地址的大小:IP地址是一个4字节,32位的整数 (2)IP地址的格式:IP地址是一个32位的整数,但是为了我们便于记忆,通常使用“点分十进制”字符串形式来表示IP地址,例如:192.168.0.1,用点分割的每一个数字表示一个字节,范围是0到255 (3)IP地

tecoes的博客 1万+

Windows 11 安装 JDK 11:下载、安装、配置环境变量、验证

本文详细介绍了在 Windows 11 系统中安装 JDK 11 的完整流程,包括从 Oracle 官网下载压缩包、解压到自定义目录、配置 JAVA_HOME 与 Path 环境变量,并验证安装是否成功。文章还包含一个专为 JDK 11 新特性设计的测试程序,涵盖 Lambda 表达式 var 语法、HTTP 客户端 API、字符串增强方法等,帮助读者确认安装版本正确无误,适合初学者和需要多版本 JDK 共存的开发者参考。

寒水馨 · 轻量级技术文档 · hanshuixin.org 2779

javaSE————网络编程套接字

网络上,数据的传输是会发生丢包的情况的,可能会受到外界的干扰,那么可靠传输就能避免这样的丢包吗,事实上是不能的,可靠传输只是保证尽可能提高传输成功的概率,如果出现了丢包,也能感知到,不可靠传输的话就是把数据发送之后就不管了,那么这样的话我们就使用可靠传输就好了呀,还要UDP干嘛呢,凡是必有代价,UDP的话速度会更快;Socket就是套接字,啥是套接字,这名起的,Socket套接字是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本单元,基于Socket套接字的网络程序开发就是网络编程;

2301_79083481的博客 2799

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

网络编程套接字

目录 1.网络编程的基本概念 1.1服务器 1.2客户端 2.Socket套接字 2.1概念 2.2分类 3.UDP数据报套接字编程 3.1DatagramPocket API 3.2DatagramSocket API 3.3UDP实现回显服务 4.TCP流套接字编程 4.1ServerSocket API 4.2Socket API 4.3TCP实现回显服务 4.3.1用多线程进行优化 4.3.2用线程池进行优化 1.网络编程的基本概念 ①什么是网络编程: 网...

weixin_58850105的博客 2637

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

网络编程之套接字

套接字是网络编程的基础,是网络上运行的程序之间进行数据交换的一种方式。它可以看作是一个端点,用于发送和接收数据,使得运行在不同机器上的应用程序能够交换信息,从而实现网络功能。套接字的概念最早由Unix系统的开发者引入,并逐渐成为网络编程中不可或缺的一部分。套接字主要由系统提供,用于网络通信的技术,它是基于TCP/IP协议的网络通信的基本操作单元。套接字工作在网络的传输层,它利用了TCP/IP协议族中的TCP或UDP协议来传送数据。

浩瀚之水的专栏 1523

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【网络编程】网络编程 和 Socket 套接字认识

为什么需要网络编程,什么是网络编程,Socket 套接字的简要认识

bit me的博客 3080

JAVA网络编程——socket套接字的介绍上(详细)

大家好!今天笔者分享一篇关于Socket 套接字的博客,希望能为正在学习网络编程的读者提供一些帮助。梳理网络通信的基础概念本文还将顺带总结一些与 Socket 密切相关的基础知识,包括:IP 地址、端口号、网络协议、五元组、协议分层模型的作用与内容、TCP/UDP 区别、Socket API 的使用方式,以及如何通过代码模拟客户端/服务器之间的通信过程。理解客户端与服务器的数据交互。

cjejwe的博客 6318

C++网络编程之套接字基础

在网络编程中,套接字(Socket)是一种用于进程间通信的接口。套接字是操作系统提供的一种抽象层,它允许不同计算机之间的进程通过网络进行通信。套接字实际上并不神秘,简单来说,套接字是连接网络中不同主机上应用程序的桥梁,通过套接字,应用程序可以发送和接收数据。套接字有多种类型,最常见的两种是:流式套接字和数据报套接字。流式套接字:基于TCP协议,提供面向连接的、可靠的数据传输服务。数据在传输过程中会被组织成无边界的字节流,并按照发送顺序到达接收端。数据报套接字。

hope_wisdom的技术博客 1640

[Linux网络编程]Socket套接字

socket 的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。本文归纳整理Socket的使用

weixin_44972997的博客 3673

Java——网络编程套接字

网络编程,指网络上的主机,通过。

qq_53332052的博客 1476

网络编程与套接字

TCP 与 UDP 协议

2302_81707171的博客 893

【JavaSE】【网络编程】UDP数据报套接字编程

网络套接字编程简介,套接字介绍,javaUDP数据报套接字编程格式

yj20040627的博客 8018

网络编程—Socket套接字详解

网络编程,Socket套接字

Krive~Irving 3225

6.网络编程套接字(上)

本文章为大家讲解了网络编程的基础,以及Socket套接字和API相关的知识,最后我们为大家带来了什么是UDP的讲解,主要讲解了UDP是什么,以及UDP相关的API该如何使用,并为大家举例了UDP服务端和UDP客户端的代码,并运行和操作他们,附上截图,希望大家能理解并掌握UDP的相关知识点哦!!!

xinhang10的博客 1509
上一篇: 网络编程|InetAddress类
下一篇: 网络编程|多线程网络编程
Geekst
博客等级 码龄8年 15粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值