Socket网络编程复习与总结

Windows下C语言单线程socket通信 编程环境:CodeBlocks + MinGW1、服务器端#include <stdio.h> #include <string.h> #include <winsock32.h> // 函数定义头文件,调用API#pragma comment(lib,"wsk2_32.lib") // Windows socket APIint main() { // 初始化WSA WSADATA 阅读详情

TCP部分

头文件Winsock32.h
库文件ws2_32.lib
(注:以下在服务器和客户端都能发送和接收)

服务器:

  WSAData wsaData;
  int     error;

  error = WSAStartup( MAKEWORD( 2, 2 ), &wsaData );
然后判断error值!=,返回;
然后判断是否被DLL支持

socket(,,)
第一个参数必须:AF_INET,表示地址协议族
第二个参数:a.SOCK_DGRAM,b.SOCK_STREAM. a是UDP类型,b是TCP类型
第三个参数:最好为0,他会根据地址类型和套接字类别,自动为你选择一个合适的协议
调用成功则返回一个SOCK类型的数据类型描述符,如果失败,这个就会返回一个INVALID_SOCKET,错误信息可以通过WSAGetLastError函数返回。


bind(,,)
第一个参数为要绑定的socket.
第二个参数指定该套接字的本地地址信息,是指向sockaddr结构的指针变量,对于不同协议不同(所以我们要用到第三个参数sizeof(sockddr)),在TCP/IP协议中,我们可以用socketaddr_in结构代替sockaddr。
struct socketaddr_in
{
short sin_family;//这个固定为AF_INET,
unsigned short sin_port;//端口号,注意,这里必须用网络字节序,调用函数htons函数
struct in_addr sin_addr;//IP地址,如果指定为INADDR_ANY,则允许套接字向任何分配给本机的IP地址发送或者接收数据,这对于有多个网卡的机器来说,就简化了程序的编写,如果只想让一个IP地址接收数据,则必须指定具体某个IP,这可以用inet_addr()函数,注意,这里也必须用网络字节序,调用函数htonl函数
char sin_zero[8];//只是个填充,以保证socketaddr_in与sockaddr长度一样
}
bind()函数调用成功返回0,失败就会返回一个SOCKET_ERROR,同样的错误信息可以通过WSAGetLastError函数返回。

listen(,)
第一个参数为套接字
第二个参数:等待连接最长请求队列

在死循环里调用accept(,,)  //等待客户端连接
第一个参数为套接字
第二个参数为客户端的IP
第三个参数地址结构的长度,必须有一个初始值,可以用sizeof(SOCKADDR)
返回一个SOCKET

send(,,,)
第一个参数为套接字(accept返回值)
第二个参数包含被传送的数据的buffer
第三个参数buffer数据的长度
第四个参数flag,影响send的行为,设为0

recv(,,,)
第一个参数为套接字(accept返回值)
第二个参数包含被接收的数据的buffer
第三个参数buffer数据的长度
第四个参数flag,影响recv的行为,设为0

最后closesocket().


客户端:
WSAStartup方法调用,建立一个socket,这与服务器一样

connect(,,)
第一个参数为套接字
第二个参数地址结构体信息,与服务器端bind函数类似
第三个参数地址结构长度

recv(,,,)
与服务器端recv函数类似

send()
与服务器端send函数类似

closesocket
 

 

UDP部分

头文件Winsock32.h
库文件ws2_32.lib

服务器:
WSAStartup方法调用,建立一个socket,这与TCP服务器类似(第二个参数改为SOCK_DGRAM)

bind()一样

recvfrom(,,,,,)
第一个参数为socket
第二个参数buf数组
第三个参数buf的长度
第四个参数flag,设为0,
第五个参数目的地址结构的指针(out)
第六个参数整形的指针,返回地址结构的大小,(in,out)

closesocket()

WSACleanup()

客户端:
WSAStartup方法调用,建立一个socket

sendto(,,,,)
第一个参数为socket
第二个参数buf数组
第三个参数buf的长度
第四个参数flag,设为0,
第五个参数目的地址结构的指针(out)
第六个参数地址结构体的长度,(in,out)

closesocket()

WSACleanup()

socket网络编程复习笔记(三):套接字描述符背后的秘密 1.套接字概念回顾(1)套接字是一个标识符; (2)套接字是一个结构; (3)套接字是一个包含标识、数据和操作的复合体,是服务访问点。 我们已经知道,一个套接字描述符s实际上是一个整形数据,在winsock.h头文件中,SOCKET是这样被定义的:typedef unsigned int u_int; typedef u_int SOCKET;但是,我们不得不提出一个问题,简简单单的一个整形数 阅读详情

相关推荐

socket网络编程复习笔记(二):套接字基本原理(下)

6.套接字与接口(套接字变量 = 套接字描述符 = 套接字标识符) 我们惊奇地注意到,套接字描述符符与端口号有着一些令人惊奇地相似之处:它们都是整形数据,都是对通信的标识。 可是,它们的不同之处在哪里呢? 端口号port作为端点地址结构中的一份子,还要配合IP地址这个左膀右臂方能发挥所长,但套接字描述符s却似乎能够“独来独往”。那么,这两种标识有着怎样本质的不同?

Meditator_hkx的博客 1589

Winsock网络编程头文件及库文件的设置

Winsock是Windows下网络编程的规范。使用Winsock可以实现基于TCP或UDP的通信。 1 Winsock版本 Winsock主要包含两个版本,即Winsock1和Winsock2。Winsock2是Winsock1的扩展,增加了很多异步函数。Winsock2的函数一般都有WSA的前缀,例如,在Winsock1中创建套接字的函数是socket(),在Winsock2中的函数是WS...

hou09tian的博客 1万+

听首歌的时间,简单复习下 python 网络编程之 socket,美不美?滚雪球学python第4季14篇

在 python 中有两个不同层级的网络编程API,分别如下所示:基于 socket 的网络编程,较低层,采用 TCP/UDP 协议;基于 url 的网络编程,较高层,采用HTTP/HTTPS协议。如果想要系统的研究网络知识,需要掌握的知识包括网络结构,TCP/IP协议,IP地址,端口等相关信息,这些肯定不是咱们滚雪球第四季的相关内容,作为扩展知识,可以自行研究。TCP与UDP Socket 网络编程TCP/IP协议的传输层存在两种协议:TCP:传输控制协议,该协议面向连接,比较可靠,连接

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 2万+

vs报错---winsock函数重定义

问题:之前写服务器端接受服务的时候,用的都是MFC 版本的,  (ps,如果是stdafx那个,会把服务所需的声明给略去),然后今天用上了windows.h  结果一堆错误,显示socket函数有多个链接项,有重定义错误。         原因分析:        主要原因是因为中包含了头文件,由于其版本的不同,导致出现上述的错误。          问题解决:         1,

hao931126的博客 1218

树莓派介绍与可安装的操作系统

树莓派是一款由英国树莓派基金会开发的信用卡大小的微型计算机。处理器(CPU)内存(RAM)图形处理器(GPU)USB 接口网络接口(以太网和 Wi-Fi)视频输出(HDMI)音频输出用户只需添加电源、存储卡、显示器和输入设备(键盘、鼠标),就可以将其当作一台功能齐全的电脑使用。主要特点:低成本:价格亲民,适合教育和个人项目。小巧便携:体积小,便于携带和部署。功能强大:支持多种编程语言和操作系统,功能不逊于传统电脑。树莓派从最初的教育工具发展成为功能强大的多用途平台。最新的树莓派 5。

像风一样自由的博客 2200

Ansys疲劳仿真:工程结构寿命评估的实战方法论

做了这么多年仿真,有个感受越来越深——静力学算得再漂亮,疲劳寿命预测不对,项目照样过不了评审。不是因为理论有多复杂,而是因为疲劳损伤的物理机制本身就带有统计属性,材料内部的微观缺陷分布、应力集中位置、载荷谱的随机性,每一项都能让结果偏移20%甚至更多。本文从实战出发,梳理Ansys疲劳仿真的核心流程,重点讲清楚载荷类型选择、S-N曲线处理、应力集中修正这几个最容易出问题的环节。疲劳仿真做好了,最大的收获不是跑出一个漂亮的Damage云图,而是对结构的真实薄弱环节建立起量化的认知。

keyanxiaobaigou的博客 529

Windows下的网络编程Winsock

相比于基础,网络编程就要复杂一些,但其实也有固定格式,记住即可。

森明帮大于黑虎帮的博客 6914

从零搭建ROS机械臂仿真环境:Ubuntu 20.04+Noetic下配置睿尔曼RM65的完整流程

本文详细介绍了在Ubuntu 20.04系统中,基于ROS Noetic搭建睿尔曼RM65机械臂的完整仿真环境。从环境准备、工作空间创建到MoveIt!配置与Gazebo仿真环境集成,提供了完整的流程和优化建议,帮助开发者高效实现机械臂仿真与调试。

v6b7n8m9q0的博客 934

Winsock

WinSockWinsock初始化、反初始化错误检查和处理使用IP协议创建基本的Winsock调用来建立通信IPv4寻址字节排序创建套接字面向连接的通信在Winsock中,建立通信的步骤:服务器:客户机:套接字状态 Winsock 编译采用了WINSOCK.H的应用程序时,需要链接到WS2_32.LIB库 使用WINSOCK.H时,需要链接到WSOCK32.LIB 使用MSWSOCK.H时,需要...

qq_36308972的博客 4263

WSL2双显卡配置实战:避开Tesla与TCC模式的那些坑

本文针对WSL2环境下无法识别Tesla计算卡的问题进行深度解析。核心原因在于WSL2目前仅支持WDDM模式的显卡,而Tesla系列及运行在TCC模式下的显卡因采用纯计算架构而无法兼容。文章提供了详细的排查步骤,并给出了包括调整显卡用途、使用虚拟机或物理机在内的多种实用解决方案,帮助开发者避开配置陷阱。

weixin_29289821的博客 544

AI 技术新手入门与实战指南

仅仅能对话还不够,实际应用中,我们往往需要让 AI 处理特定的业务数据。比如,从日志文件中提取错误码,或者将非结构化的用户反馈整理成 JSON 格式。这时候,自定义输入和严格的结果验证就显得尤为重要。假设我们需要让 AI 分析一段服务器日志,并只返回错误的级别和简述。请分析以下日志片段,提取所有 ERROR 级别的信息。要求输出格式为 JSON 列表,包含 'timestamp' 和 'message' 两个字段。不要输出任何多余的解释文字。日志内容: {

2600_94936330的博客 2681

Python3 Socket 网络编程复习笔记

本文系统介绍了Python网络编程的核心知识,主要包括:1.基础概念:区分高低级别网络服务,解释套接字(Socket)定义及其在进程间通讯中的作用;2.核心API:详细说明socket()函数参数及服务器端/客户端专用方法,包括bind()、listen()、connect()等;3.实战案例:提供简单TCP通讯、带时间戳双向通讯、多线程聊天室三个层次的代码实现,涵盖单工/全双工/群聊私聊等场景;4.补充知识:列举常用网络协议及对应Python模块,总结TCP服务器/客户端标准开发流程。文中所有示例均附带完

永远怀着至诚之心拥抱世界 888

基于Playwright的雪球网股票情绪数据自动化采集实战

网络爬虫是自动化获取互联网公开数据的关键技术,其核心原理在于模拟浏览器行为或直接发送HTTP请求以解析网页内容。在金融科技与量化分析领域,实时、稳定的数据源具有极高的技术价值,能够为市场情绪分析、因子挖掘提供基础。面对采用动态加载、复杂反爬机制的现代单页应用,传统的请求库与Selenium方案在稳定性与隐蔽性上面临挑战。本文聚焦于利用Playwright这一现代浏览器自动化工具,通过模拟真实用户交互、监听网络请求,构建一个能够稳定采集雪球社区实时讨论热度的解决方案。该方案不仅解决了动态内容渲染问题,还通过请

weixin_42529328的博客 585

网络编程--socket第复习一次

服务器端 ''' 一次会话 ''' import socket #创建socket对象 soc = socket.socket() #绑定IP和端口号 soc.bind(("",6666)) #开始监听 soc.listen() while True: print("等待连接") #等待连接 conn,add = soc.accept() print("连接成功")...

gly的博客 191

【产品经理修炼之道】- 基金产品-“TA系统 ”

TA:Transfer Agent 缩写,通常称成“登记过户”。开放式基金登记过户(TA)系统是基金的登记过户系统。其功能涵盖了基金交易业务的各个环节,包括账户业务处理,如投资者开户、修改账户资料、挂失/解挂等;日常交易业务处理,如认购、申购(一般申购和定期定额)、赎回(一般赎回、指定赎回、预约赎回等)、转托管、基金转换等;特殊业务处理,如非交易过户、账户冻结/解冻等;分红业务处理,如现金分红和红利再投资。

xiaoli8748的专栏 1679

实现画布拖拽算子排布,通过flink实现算子编排计算,如何实现?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1072

JAVA网络编程期末复习资料 第八章 socket编程

JAVA网络编程期末复习资料 第八章 socket编程socket编程套接字概念JAVA提供了流socket和数据报socket,流socket和数据报socket各自的作用TCP Socket编程的步骤UDP Socket编程的步骤熟练掌握ServerSocket类、Socket类的基本方法及应用编程熟练掌握DatagramSocket类、DatagramPacket类的基本方法及应用编程理解本章涉及到的所有类的含义和用途 socket编程 套接字概念 JAVA提供了流socket和数据报socket,流

mcyuuji的博客 284

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

JavaSE复习_12 Socket网络编程

△客户端使用Scanner与BufferedReader的异同,Scanner在客户端调用s.shutdownoutput的时候,将会因为读不到行而报异常,但是BufferedReader的readline方法则会正常终止.因此应当根据实际情况选择客户端服务端的流输入. △实例:根据DatagramSocket和DatagramPacket建立发送端和接收端。 接收端: public ...

weixin_30267697的博客 106

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

网络编程复习(五):Socket编程中的IO模式详解

先来说说同步和异步: 在JAVA的程序设计中,同步就是指代码按顺序一步一步向下执行,比如说main方法,如果没有多线程,那么该方法必定是一步一步按顺序向下执行,那么如果我在main方法中开启一个线程,那么这个单独的线程与main程序在宏观上可以看做是同时执行的,这就是异步。 Socket网络编程的通信方式可以分为四种: 一:同步阻塞: 这是最最古老的实现方式,也是第一节提到的,在此种方式下

Lee_Ho_的博客 582

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

socket网络编程复习笔记(一):套接字基本原理(上)

1.网络编程为何物?我们学习C语言时,一般都是从printf函数和scanf函数进行控制台输入输出开始的。控制台的输入输出和文件的输入输出非常类似。而网络编程,其实也与文件的输入输出十分相像,所以学起来也并不难哦~ 按照一般化的定义,网络编程就是编写程序使两台连网的计算机相互交换数据。那么套接字socket又是什么呢? 套接字是网络传输用的软件设备,它就是编程时用来连接网络的工具,就像插槽的插口.

Meditator_hkx的博客 2208

Java高级知识复习----Socket网络编程TCP、UDP和URL

1.TCP网络编程 1.客户端发送内容给服务器服务器将内容打印到控制台上。 package top.oneluckyguy.socket; import org.junit.Test; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import

Culprit的博客 252

socket网络编程复习笔记(四):认识套接字函数

在前面的内容中,我们知道了通信的基本流程,在通信过程中会用到很多套接字函数,诸如socket(),bind(),recv()等等。那么我们在实际编程中,我们该如何正确使用套接字函数呢?1.socket函数分类按照函数的功能不同,我们可以将大部分常用的套接字函数归入到以下四类中: 通信类:socket(); bind(); listen(); accept(); connect(); recv();

Meditator_hkx的博客 1342

Java网络编程期末复习——第六章Socket(套接字)

网络应用程序的接口。Socket可以看作不同主机间的进程进行双向通信的端点。 套接字类型: 流套接字(SOCK_STREAM) 流套接字用于提供面向连接、可靠的数据传输服务,即TCP协议。(ServerSocket, Socket) 数据报套接字(SOCK_DGRAM) 从一台机器向另一台机器以无连接的、数据报的方式进行通讯,即UDP协议。(DatagramSocket) 原始套接字(SOCK_RAW) 允许对较低层次的协议直接访问,用来操纵网络层和传输层应用。(java无法直接使用) TCP Sock.

cmpter的博客 450

Linux高级编程复习 第九章 信号量同步_socket网络编程基础_TCP_UDP

待续

学峰的学习笔记 794

Linux网络编程实战1.从五层模型到Socket编程(个人学习/复习使用 有错误欢迎指正)

数据链路层负责“这一跳送给谁”;网络层负责“最终送到哪里”;传输层负责“送给哪个程序,并保证如何送达”;应用层负责“这份数据到底是什么意思”。定义通信规则,让数据从单纯的二进制信息变成真正具有业务意义的消息。到这里,我们终于完整走完了一次数据的旅程。现在,让我们把前面的五层模型重新放回最开始的场景。打开地图,查看霍格沃兹城堡的位置。当我点击地图按钮时,游戏客户端需要向华纳服务器发送一个请求:“玩家请求打开当前地图数据。

stellanke的博客 888

Java实现socket网络编程

本文根据韩顺平老师的TCP网络编程进行总结 感谢B站老韩 仅总结了TCP编程的部分 UDP只是看了一下 没有进行记录笔记 本篇文章仅供自己学习使用,如有任何错误,请与我联系指正修改,十分感谢! Java实现TCP编程的一些笔记 分为服务端和客户端两部分 服务端使用ServerScoket 客户端使用Scoket 服务端的端口由自己指定 ServerSocket serverSocket = new ServerSocket(8888) 客户端也有端口 是由TCP/IP协议分配的 服务端调用socket.

超哥的博客 268
上一篇: 23种设计模式的代码版
下一篇: AWT与Swing的学习笔记
Image_Graphics
博客等级 码龄20年 18粉丝 52原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值