C++中实现TCP/UDP网络编程的流程和主要函数使用方法说明

socket通讯

网络字节序

  • 小端法: 高位存高地址,低位存低地址。 (intel架构的存储方式)
  • 大端法:高位存低地址,低位存高地址。(网络传输的方式)
#include <arpa/inet.h>

// 将本地转网络,转IP  转192.168.1.11->string->atoi->int->htonl->网络字节序,可以使用 int inet_pton(); 进行直接转换
uint32_t  htonl(uint32_t hostlong);
// 本地转网络,转port
uint16_t  htons(uint16_t hostshort);
// 网络转本地,转ip
uint32_t ntohl(uint32_t netlong);
// 网络转本地,转port
uint16_t ntohs(uint16_t netshort);
// string转网络字节
int inet_pton(int af, const char * restrict src, void * restrict dst);
// af: AF_INET, AF_INET6
// src: ip地址,点分十进制
// dst: 转换之后的 网络字节序的地址

创建socket服务器的步骤

  1. 创建socket句柄
  2. bind() 绑定ip+port
  3. listen() 设置监听上线,同时连接数
  4. accept() 阻塞监听客户端连接
  5. read() 进行数据的读取,读取到的数据需要toupper()进行小写转大写
  6. write() 写入,写给客户端返回值
  7. 当read()读到0就是close的时候进行 close() 关闭

Socket函数分析

创建一个套接字

int socket(int domain, int type, int protocol);

  • domain : 所选用的ip地址协议, AF_INET, AF_INET6
  • type : 类型 SOCK_STREAM(TCP/流形式), SOCK_DGRAM(UDP/报形式)
  • protocol : 代表协议号 0

返回值:

  • 成功返回0,新套接字的文件描述
  • 失败返回: -1
#include <sys/socket.h>

fd = socket(AF_INET, SOCK_STREAM, 0)

sockaddr地址结构体分析

#include <sys/socket.h>
#include <arpa/inet.h>

struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(9527);
int dst;
inet_pton(AF_INET, "192.168.22.45", (void *)&dst);
addr.sin_addr.s_addr = dst;
addr.sin_addr.s_addr = htonl(INADDR_ANY) // INADDR_ANY 取出系统有效的任意ip地址,是二进制类型
bind(fd, (struct sockaddr *)&addr, size);

bind函数的分析

绑定函数

bind(fd, (struct sockaddr *)&addr, size);

  • fd : socket文件对象
  • (struct sockaddr *)&addr : 将sockaddr存储的地址结构进行强制转换成sockaddr 进行传入
  • size : addr的大小,使用sizeof进行获取

listen函数分析

监听函数

int listen(int sockfd, int backlog);

  • sockfd : 套接字
  • backlog : 最大连接数,最大为128
  • 返回值: 0, -1 error

accept函数分析

堵塞函数

int accept(int sockfd, struct sockaddr addr, socklen_t addrlen);

  • sockfd : socket 函数返回值
  • addr : 传出参数, 成功返回服务器的ip和端口号
  • addrlen : 传入传出。入: addr的大小。 出:客户端addr的实际大小

返回值:

  • 成功: 大于0,返回成功的套接字文件描述符
  • 失败:返回-1

connect函数分析

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 使用现有的socket与服务器建立连接

  • sockfd: socket 函数返回值
  • addr: 传入服务器的地址结构
  • 返回值:
    • 成功:0
    • 失败:-1

原文地址:https://www.cnblogs.com/fandx/p/12150672.html

时间: 2025-01-14 16:40:35

C++中实现TCP/UDP网络编程的流程和主要函数使用方法说明的相关文章

Java中的TCP/UDP网络通信编程

127.0.0.1是回路地址,用于测试,相当于localhost本机地址,没有网卡,不设DNS都可以访问. 端口地址在0~65535之间,其中0~1023之间的端口是用于一些知名的网络服务和应用,用户的普通网络应用程序应该使用1024以上的端口. 网络应用中基本上都是TCP(Transmission Control Protocol传输控制协议)和UDP(User Datagram Protocol用户数据报协议),TCP是面向连接的通信协议,UDP是无连接的通信协议. Socket连接套接字,

TCP/UDP网络编程的基础知识与基本示例(windows和Linux)

一.TCP编程的一般步骤 服务器端: 1.创建一个socket,用函数socket() 2.绑定IP地址.端口等信息到socket上,用函数bind() 3.开启监听,用函数listen() 4.接收客户端上来的连接,用函数accept() 5.收发数据,用函数send()和recv(),或者read()和write() 6.关闭网络连接 7.关闭监听 客户端: 1.创建一个socket,用函数socket() 2.设置要连接的对方IP地址和端口等属性 3.连接服务器,用函数connect()

自测之Lesson15:TCP&amp;UDP网络编程

题目:编写一个TCP通信的程序. 实现代码: #include <stdio.h> #include <sys/socket.h> #include <unistd.h> #include <sys/types.h> #include <string.h> #include <netinet/in.h> #include <arpa/inet.h> #define PORT 0xaaaa // 服务端 void start

TCP/IP 网络编程 (抄书笔记 2) -- UDP

TCP/IP 网络编程 (抄书笔记 2) – UDP TCP/IP 网络编程 (抄书笔记 2) – UDP Table of Contents server client connect 来源: <TCP/IP 网络编程> 抄书: TCP 协议若要向 10 个客户端提供服务, 除了需要 listen 套接字外, 还需要 10 个服务器端套接字 (accept), 但是在 UDP 中, 不管是服务器端还是客户端都只需要 1 个套接字 udp 的 client 不需要 bind, 调用 sendt

【TCP/IP网络编程】:06基于UDP的服务器端/客户端

本篇文章简单描述了UDP传输协议的工作原理及特点. 理解UDP UDP和TCP一样同属于TCP/IP协议栈的第二层,即传输层. UDP套接字的特点 UDP的工作方式类似于传统的信件邮寄过程.寄信前应先在信封上填好寄信人和收信人的地址,之后贴上邮票放进邮筒即可.当然信件邮寄过程可能会发生丢失,我们也无法随时知晓对方是否已收到信件.也就是说信件是一种不可靠的传输方式,同样的,UDP所提供的也是一种不可靠的数据传输方式(以信件类比UDP只是通信形式上一致性,之前也以电话通信的方式类比了TCP的通信方式

浅谈TCP/IP网络编程中socket的行为

我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉: . TCP/IP协议(如连接的建立和终止.重传和确认.滑动窗口和拥塞控制等等) . Socket I/O系统调用(重点如read/write),这是TCP/IP协议在应用层表现出来的行为. . 编写Performant, Scalable的服务器程序.包括多线程.IO Multiplexing.非阻塞.异步等各种技术. 关于TCP/IP协议,建议参考Richard Stevens的<TCP/IP Illust

TCP 、UDP网络编程作业代写、代写C 语言 TCP程序 Network Programming using C

TCP .UDP网络编程作业代写.代写C 语言 TCP程序Network Programming using COverview? This homework is due by 11:59:59 PM on Thursday, April 26, 2018.? This homework will count as 8% of your final course grade.? This homework is to be completed individually. Do not shar

Java TCP/UDP socket 编程流程总结

最近正好学习了一点用java socket编程的东西.感觉整体的流程虽然不是很繁琐,但是也值得好好总结一下. Socket Socket可以说是一种针对网络的抽象,应用通过它可以来针对网络读写数据.就像通过一个文件的file handler就可以都写数据到存储设备上一样.根据TCP协议和UDP协议的不同,在网络编程方面就有面向两个协议的不同socket,一个是面向字节流的一个是面向报文的. 对socket的本身组成倒是比较好理解.既然是应用通过socket通信,肯定就有一个服务器端和一个客户端.

《TCP/IP网络编程》

<TCP/IP网络编程> 基本信息 作者: (韩)尹圣雨 译者: 金国哲 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115358851 上架时间:2014-6-19 出版日期:2014 年6月 开本:16开 页码:1 版次:1-1 所属分类:计算机 > 计算机网络 > 网络协议 > TCP/IP 更多关于>>><TCP/IP网络编程> 编辑推荐 为初学者准备的网络编程 本书涵盖操作系统.系统编程.TCP/IP协议等多种