二、UDP 编程流程 1.服务器 代码如下(示例): int main() { int sockfd = socket(AF_INET,SOCK_DGRAM,0); assert( sockfd...sockaddr*)&caddr,sizeof(caddr)); } close(sockfd); exit(0); } 2.客户端 代码如下(示例): int main() { int sockfd = socket
网络协议中的下三层,主要解决的是,数据安全可靠的送到远端机器 用户使用应用层软件,完成数据发送和接收的 先把这个软件启动起来-->进程 日常网络通信的本质:就是进程间通信!!...* 类型表示,在使用的时候需要强制转化成sockaddr_in,这样的好处是程序的通用性,可以接收IPv4, IPv6, 以及UNIX Domain Socket各种类型的 sockaddr...7.4 接收连接请求 (TCP 服务器) 服务器使用 accept() 从连接队列中提取下一个连接请求,并返回新的套接字用于与客户端通信: int accept(int socket, struct sockaddr...local.sin_addr.s_addr = INADDR_ANY; Listening Socket vs Connected Socket Listening Socket:服务器使用它来监听连接请求...客户端连接:客户端通过 socket() 创建套接字,使用 connect() 发起连接请求。 三次握手:TCP 客户端与服务器通过三次握手建立连接。
内存拷贝, select让内核把 FD 消息通知给用户空间的时候使用了内存拷贝的方式,开销较大,但是Epoll 在这点上使用了共享内存的方式,这个内存拷贝也省略了。...需要注意的是,当创建好epoll句柄后,它就是会占用一个fd值,在linux下如果查看/proc/进程id/fd/,是能够看到这个fd的,所以在使用完epoll后,必须调用close()关闭,否则可能导致...EPOLLONESHOT:只监听一次事件,当监听完这次事件之后,如果还需要继续监听这个socket的话,需要再次把这个socket加入到EPOLL队列里 epoll_wait int epoll_wait...Linux内核具体的epoll机制实现思路。...当某一进程调用epoll_create方法时,Linux内核会创建一个eventpoll结构体,这个结构体中有两个成员与epoll的使用方式密切相关 /* * This structure is stored
它通常在服务器端使用,与 socket、bind 和 accept 函数配合使用。...函数原型(C/C++) 在 POSIX 系统(如 Linux)中,listen 函数的原型如下: int listen(int sockfd, int backlog); 在 Windows 系统中,listen...listen 和 accept 使用步骤 listen 和 accept 函数通常用于服务器端,典型的使用步骤如下: 调用 socket 创建一个套接字。...使用 accept 返回的新套接字与客户端通信。 通信完成后,关闭新套接字。...EchoServer -- 线程池 引入我们之前写的【Linux】:线程库 Thread.hpp 简单封装 Thread.hpp 以及 单例模式下的【Linux】:日志策略 + 线程池(单例模式 Threadpool.hpp
linux socket的基础 linux的空间分为kernel space 和 user space, 比例是1:3 linux中一切皆文件, 所以用文件描述符来表示socket, 实际上是socket...用来进程与进程之间的通信 socket如何创建 一个进程要创建socket的流程如下所示 1....pathname, MY_SOCK_PATH should be deleted using unlink(2) or remove(3) */ } 如何在linux...上查看socket ll /proc//fd linux默认的三个文件描述符 0 - stdin 1 - stdout 2 - stderr >& 是重定向到文件描述符...基于socket的应用 java nio java nio用channel代替了输入输出流, 这个channel, 就是socket 其原理是使用了linux kernel里的fcntl /*
创建socket _sockfd = ::socket(AF_INET, SOCK_DGRAM, 0); if (_sockfd < 0) {...LOG(LogLevel::FATAL) socket: " << strerror(errno); Die(SOCKET_ERR); }...InetAddr _addr; // 服务器地址包括ip和port int _sockfd; bool _isrunning; // 服务器运行状态 }; #endif 要使用网络服务器需要使用...socket创建套接字,然后将IP和端口号bind进入内核,最后就可以调用recv/sendto接口进行网络发送和接收信息了 服务器使用代码: #include "UdpServer.hpp" /...socket socket // client必须也要有自己的ip和端口!但是客户端,不需要自己显示的调用bind!!
在前面几篇文章中,我们实现了Socket编程,也就是基于UDP和TCP进行了网络编程,通过这几次编程我们已经熟悉了Socket编程相关的系统调用,那么这篇文章我们就来使用模版方法模式封装一个Socket...封装Socket 那我们就可以抽象一个Socket的基类,将创建套接字等需要的系统调用在基类中设为纯虚函数,然后我们可以定义两个模板方法,一个UDP的模板方法,一个TCP的模板方法,需要使用哪个传输层协议的网络服务就在主程序中调用哪个模板方法...,而如果是int类型的话,只能使用原始的系统调用,但我们已经封装了就尽量使用封装的系统调用,这样虽然也行但是有点挫 namespace SocketModule { using namespace...注意:对于无连接的套接字(如 UDP),通常使用 sendto 或 sendmsg,因为它们允许指定目标地址。...服务端 封装好之后就是使用封装的Socket来实现服务端,我们已经实现过了,这里就不再介绍了,只需要将原先的原生系统调用换成封装的Socket即可 #pragma once #include "Socket.hpp
Socket soket接口是TCP/IP网络的API。网络的socket数据传输是一种特别的I/O,socket也是一种文档描述符。...prococol)来创建socket domain:指明所使用的协议族,常用PF_INET, 表示互联网协议族(TCP/IP) 说明: 在绑定本地地址或连接远程地址时需要初始化sockaddr_in...结构,其中指定address family时一般设置为AF_INET,即使用IP。...中用PF_INET指定协议族,在设置address中时,使用AF_NET,当然两者是一样的。 ...位值从网络字节序转换为主机字节序 ntohs(); 把16位值从网络字节序转换为主机字节序 bind函数在成功调用后,返回0,出错返回-1并将errno设置为响应的错误号 建立连接 面向连接的客户程式使用
如果对你有帮助,麻烦点个在看或点个赞,感谢~ 不管是Qt开发还是linux 嵌入式应用开发,一个人的核心竞争力还是不断思考,也就是不断琢磨。...下面的程序主要是Linux C Socket 读取JSON文件并传输,然后再写入文件,其中使用了cJSON库,关于cJSON库不过多介绍,主要介绍整体的思路。 1....Server 端 使用的是socket 阻塞式,没有使用select、poll、epoll等 接收端按照JSON格式解析数据,并提取感兴趣Key所对应的Value 程序功能挺快就可以做好,做完之后进行拆解...,将socket通信独立出来,JSON解析、写文件、响应客户端JSON数据等分别写成函数。...小结 编译JSON时需要链接linux的数学库 自己琢磨如何拆解函数功能 应用程序也主要是调用别人的api,那么你的核心竞争力是什么呢 ? 如需程序工程可在公众号后台留言。
TCP socket API 详解 下面介绍程序中用到的 socket API,这些函数都在 sys/socket.h 中。...socket() 作用:打开一个网络通讯端口,如果成功的话,就像 open()一样返回一个文件描述符; 应用程序可以像读写文件一样用 read/write 在网络上收发数据; 返回值:如果 socket...listensockfd; bool _isruning; }; 与Udp服务器不同的是,Tcp服务要求我们先调用listen接口监听,然后在通过accept和客户端使用...connet建立连接后才可以进行通信;所以如果仅仅使用单进程是无法满足同时接收多个客户端的消息,下面将会给出多进程、多线程以及基于线程池实现的Tcp服务。...使用服务器代码如下: #include "TcpServer.hpp" int main() { std::unique_ptr tcpserver = std::
前言 在上一篇文章里面我们介绍了TCP的三次握手和四次挥手过程的介绍以及网络编程里面的一些api接口函数的介绍——Linux系统下socket编程之socket接口介绍(一)。...函数介绍 - 发送和接收 - (1)send和write: 首先说明的一点,之前介绍的socket这个函数,非常类似我们之前介绍的open函数,他们都会返回一下文件描述符;所以这里的send函数和write...IP地址格式转换函数 - (1)inet_aton、inet_addr、inet_ntoa(只用IPV4的IP地址),现在用的比较少,不过大多程序里面会看到这些函数,所以还是要学习一下它的作用,老方法使用...(这个转换完后不能用于网络传输,还需要调用htons或htonl函数才能将主机字节顺序转化为网络字节顺序,这两个函数先不讲,实战遇到的话,再进行解析),具体可以看下面Linux的源文: inet_aton...(2)struct sockaddr,这个结构体是linux的网络编程接口中用来表示IP地址的 标准结构体,bind、connect等函数中都需要这个结构体,这个结构体是兼容IPV4和IPV6的。
java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket...; public class Client { public static void main(String[] args) throws Exception { // 创建一个socket...对象 Socket socket = new Socket("localhost", 8888); // 获得输出流 OutputStream os = socket.getOutputStream...(); //---->下面是接受服务器发来的响应 // 从socket中读数据 InputStream is = socket.getInputStream(); InputStreamReader...Socket socket = serverSocket.accept(); // 从socket中读数据 InputStream is = socket.getInputStream(
在前面的文件中,我们介绍了linux网络编程中与IP相关的知识和常用的函数总结,本文针对具体的UDP通信,来详细的介绍UDP通信的使用,包括UDP通信中的点对点通信,多播,广播等。...当然,在我们服务端创建socket后,主动往外发送一个数据,这样即使我们不进行绑定,我们依然可以收到数据,这只是系统通过我们的发送,自动的绑定了一个端口,这个并不是我们想要的,实际的使用中,也并不推荐这种方式...: 3.3 使用组播的服务端和客户端例子 (TBD) 三、UDP中广播的使用 UDP广播与普通的UDP通信区别不是很大,如果需要发送广播消息时,只需要在创建完socket后,配置一下套接字,允许进行发送广播消息...解决方法如下:(允许端口重用) int on = 1; ret = setsockopt(udp_net_sta.socket, SOL_SOCKET, SO_REUSEADDR, &on, sizeof...(int)); if (ret < 0) { perror("socket set SO_REUSEADDR failed"); } 2、服务端程序,在创建完socket后,有一个bind的操作
套接字描述符 首先会先到的是文件描述符,对Linux一切皆文件的哲学又多懂了一点儿点儿。 套接字是通信端点的抽象。与应用程序使用文件描述符一样,访问套接字需要使用套接字描述符。...TCP/IP协议栈使用大端字节序。有关字节序大家可自行百度。 Linux系统是小端字节序。 2.2 地址格式 地址确定了特定通信域中的套接字端点,地址格式与特定的通信域相关。...我目前使用的ubuntu定义如下: /* Structure describing an Internet socket address. */ struct sockaddr_in {...注意:linux的man命令可以查看api的详细说明,而且还有例子,也挺不错的。 4....Linux Socket Server 与 Client 例子 个人觉得这只是套接字的入门,如果一个服务器要连接多个客户端呢?以后有机会和大家一起分享下select的套接字用法。
个人主页:island1314 个人专栏:Linux—登神长阶 1....,在使用的时候需要强制转化成sockaddr_in,这样的好处是程序的通用性,可以接收IPv4, IPv6, 以及UNIX Domain Socket各种类型的 sockaddr 结构体指针做为参数 6.4...参数: socket:监听套接字描述符 backlog:全连接队列的最大长度,用于处理多个客户端连接请求,限制同一时间并发连接数 7.4 接收连接请求 (TCP 服务器) 服务器使用 accept...local.sin_addr.s_addr = INADDR_ANY; Listening Socket vs Connected Socket Listening Socket:服务器使用它来监听连接请求...客户端连接:客户端通过 socket() 创建套接字,使用 connect() 发起连接请求。 三次握手:TCP 客户端与服务器通过三次握手建立连接。
Linux的SOCKET编程详解 1. 网络中进程之间如何通信 进 程通信的概念最初来源于单机系统。...Socket是什么 1、 socket套接字: socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –>...应用程序创建套接字后在该套接字可以使用之前,必须调用其他的过程来填充这些字段。 3、文件描述符和文件指针的区别: 文件描述符:在linux系统中打开文件就会获得文件描述符,它是个很小的正整数。...具体如何实现,可以看看linux的内核 4.1、socket()函数 int socket(int protofamily, int type, int protocol);//返回sockfd...原因很简单,如果使用一个描述字的话,那么它的功能太多,使得使用很不直观,同时在内核确实产生了一个这样的新的描述字。
而不仅仅是下载邮件到本地 域名系统(DNS):用于将域名解析为对应的 IP 地址,当用户在浏览器中输入域名时,DNS 服务器会将域名转换为对应的 IP 地址,以便浏览器能够找到对应的 Web 服务器 七、socket...编程基础 1、调用接口 (一)创建描述符 #include socket.h> int socket(int domain, int type, int protocol); 返回值:成功返回套接字描述符...,通常将其设为 0,这样系统会根据 domain 和 type 自动选择合适的协议 (二)绑定端口号 #include socket.h> int bind(int sockfd, const...sizeof 运算符来获取,这里位输入型参数 (三)监听套接字 #include socket.h> int listen(int sockfd, int backlog); 返回值:成功返回...addrlen); 返回值:成功返回一个新的套接字描述符,这个新的套接字专门用于与发起连接请求的客户端进行数据传输,原来的 sockfd 仍然用于继续监听其他客户端的连接请求 sockfd:这是由 socket
混合使用:部分应用同时使用两者(如QUIC协议结合了UDP的速度和TCP的可靠性)。 2.tcp协议函数详细介绍 1.listen函数(初始化)-------这个基本上只在服务端设置!!...InetAddr(const std::string &ip, uint16_t port) : _ip(ip), _port(port)//-----------这是服务端/客户端使用sendto之类函数使用的...InetAddr(uint16_t port) :_port(port),_ip()//-----------这是服务端使用的主机转网络----服务端使用bind函数时获取并初始化主机地址使用的函数...创建socket int sockfd = socket(AF_INET, SOCK_STREAM, 0); if(sockfd < 0) { std::cerr...socket error" << std::endl; exit(SOCKET_ERR); } // 2. bind吗??
、 4.socket编程接口 // 创建 socket ⽂件描述符 (TCP/UDP, 客⼾端 + 服务器) int socket(int domain, int type, int protocol...); // 开始监听socket (TCP, 服务器) int listen(int socket, int backlog); // 接收请求 (TCP, 服务器) int accept(int...// 本地格式->网络序列 local.sin_port = htons(_port); //2.端口号,我们自己是使用整数,需要转换成网络序列,需要使用htons函数...记得使用追加!!! if (!...每一个进程都要有自己的structaddr结构体,存储自己的IP地址和ip地址类型,和struct file 一致 ---------------建立之后要把该结构体和socket的fd描述符使用bind
: 在讲解这个之前,你得必须要明白在Linux系统下,一切皆是文件,(举个简单的例子,一般我们在Windows系统下,你是可以清楚的看到硬盘盘符,并标有大小的,可以直接用鼠标拖拉文件到里面去;而在Linux...三、使用打电话的形式来介绍socket接口函数: 1、调用socket函数(安装电话机)时进行的通话: 问:"接电话需要准备什么?" 答:"当然是电话机!"...说明: int domain(这里domain的中文意思是领域,域名):它是创建套接字所使用的协议栈,通常为AF_INET(也就是IPv4网络协议),下面试各种协议栈的汇总: DESCRIPTION...Since Linux 2.6.27, the type argument serves a second purpose: in addition to specifying a socket type...下面我们来看一下在Linux系统下它的原型: BIND(2) Linux Programmer's Manual