首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【网络通信】socket编程——TCP套接字

服务端 tcp_server tcpserver.hpp(封装) 在 tcpServer.hpp 中,创建一个命名空间 yzq 用于封装 在命名空间中,定义一个类 TcpServer 该类中包含 构造...绑定 bind 输入 man 2 bind ,查看绑定 给一个套接字绑定一个名字 第一个参数 sockfd 为 套接字 第二个参数 addr 为 通用结构体类型 第三个参数 addrlen 为 第二个参数的实际长度大小...bind返回值:若成功,则返回0,若失败,返回 -1 使用bind,是需要借助一个通用结构体来实现的 所以定义一个 网络通信类型的结构体 local 在上一篇博客中,详细讲述了 sockaddr_in...,argc为数组的元素个数 当参数输入不为2时,就会终止程序,同时打印出对应的输入参数 通过构造函数了解, 想要使用 new TcpServer 需要传入回调和端口号 客户端 tcp_client tcpclient.cc...链接成功 创建一个string类型的line,将输入的参数传入line中 使用write,将line的内容传入文件描述符中 使用read,将sock的数据传入buffer中 通过read的返回值来判断,

37140
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    网络(TCP)

    bind(): 服务器程序所监听的网络地址和端口号通常是固定不变的,客户端程序得知服务器程序的地址和端口号后 就可以向服务器发起连接; 服务器需要调用bind绑定一个固定的网络地址和端口号; bind...将整个结构体清零; 2. 设置地址类型为AF_INET; 3....连接服务器; connect和bind的参数形式一致, 区别在于bind的参数是自己的地址, 而connect的参数是对方的地址; connect()成功返回0,出错返回-1; 区别 tcp服务器和udp...**SIGUSR1 和 SIGUSR2**:这两个信号是用户定义的信号,可以用于应用程序自定义的行为。在某些情况下,你可能不希望进程响应这些信号,通常在进程不需要使用这些信号时会选择忽略。...2. 进程会话(Process Session) 在Linux中,每个进程都有一个会话(Session),这个会话由session leader(会话领导进程)控制。

    11410

    网络(TCP)

    bind(): ​ 服务器程序所监听的网络地址和端口号通常是固定不变的,客户端程序得知服务器程序的地址和端口号后 就可以向服务器发起连接; 服务器需要调用bind绑定一个固定的网络地址和端口号; bind...将整个结构体清零; 2. 设置地址类型为AF_INET; 3....()连接服务器; connect和bind的参数形式一致, 区别在于bind的参数是自己的地址, 而connect的参数是对方的地址; connect()成功返回0,出错返回-1; ​ 区别 ​ ​...如何在 C/C++ 中忽略信号? 在 C/C++ 中,您可以使用 signal() 函数来捕获或忽略信号。若要忽略一个信号,可以将信号处理程序设置为 SIG_IGN。...使用守护进程时的注意事项 文件描述符:守护进程会关闭标准输入、标准输出和标准错误输出,因此在守护进程中通常需要将这些描述符重定向到 /dev/null 或某个日志文件。

    10510

    【计算机网络】序列化与反序列化

    ,并借助 错误信息枚举 终止程序 绑定——Bind 输入 man 2 bind ,查看绑定 给一个套接字绑定一个名字 第一个参数 sockfd 为 套接字 第二个参数 addr 为 通用结构体类型 第三个参数...addrlen 为 第二个参数的实际长度大小 bind返回值:若成功,则返回0,若失败,返回 -1 想要使用bind函数,就需要先创建一个网络通信类型的变量,通过该变量存储端口号 IP地址 16位地址类型...0,若失败返回-1 若小于0,则监听失败 依旧使用日志打印处错误码和错误原因,再终止程序 获取连接——Accept 输入 man 2 accept 需要知道谁连的你,所以要获取到客户端的相关信息 第一个参数...服务器的实现 ——TcpServer.hpp 使用Sock这个类,实例化对象_listensock 初始化 在初始化中,使用_listensock这个对象 去访问 Scok类中实现过的 Socket Bind...使用 switch case 把request变量的req 中的 _x _y 通过 加 减 乘 除 取模 等进行运算 若期间错误码 出现 1 2 3,则表示错误 最终 将执行后的结果 返回resp

    27410

    网络编程『简易TCP网络程序』

    ,可以增加上一篇文章中的 err.hpp 头文件,里面包含错误码与简易错误信息 创建 err.hpp 错误码头文件 #pragma once enum { USAGE_ERR = 1,...当前服务确实使用的是 8888 端口,并且采用的是 TCP 协议 客户端 1.6.初始化客户端 对于客户端来说,服务器的 IP 地址与端口号是两个不可或缺的元素,因此在客户端类中,server_ip 和...中增加了这两句代码 // 3.构建任务对象 注意:使用 bind 绑定 this 指针 Yohifo::Task t(sock, clientip, clientport, std::bind(&TcpServer...如果我们的程序运行出现了问题,都是通过 标准输出 或 标准错误 将 错误信息 直接输出到屏幕上,debug 阶段这样使用没啥问题,但如果出错的是一个不断在运行中的服务,那问题就大了,因为服务器是不间断运行中...dup2(fd, 0); dup2(fd, 1); dup2(fd, 2); close(fd); } 当然相应的错误码也需要更新 err.hpp 错误码头文件

    39110

    【Linux网络编程】Socket编程--TCP:echo server | 多线程远程命令执行

    在这个版本中,使用多进程,实现多个客户端都可以向服务器发起连接。 上述父进程在创建子进程后,将父进程的数据结构以及文件描述符表都拷贝给了子进程,此时父子进程都指向同样的文件。...对于不使用的文件描述符,需要及时关闭,避免文件描述符泄漏。 因此,在多进程版本中,父进程在完成任务后,继续返回到获取连接那里,子进程完成获取到的新连接的任务。这样服务器实现了多进程并发式获取连接。...解决方案: 使用信号量,这是最推荐的做法,但是过于简单signal(SIGCHLD,SIG_IGN) 在子进程中再fork一次,让子进程直接退出,父进程的wait可以立即返回,僵尸状态就可以立即被处理。...客户端使用它向指定的服务器地址和端口发起连接请求。如果目标地址和端口的服务器正在监听并接受连接,connect 会成功,建立一个套接字连接。...如果服务器拒绝连接,或者发生其他网络错误,则 connect 会失败,并返回错误代码。 通过命令行参数指定服务器地址和端口,连接到服务器后,可以输入并发送消息,接收服务器返回的回显消息。

    11910

    关于muduo网络库的注解

    8 class TcpServer: 管理所有的TCP客户连接,TcpServer供用户直接使用,生命期由用户直接控制。...TcpServer在构造时接收一个由IP地址和port构成的InetAddress参数,并将此地址传给Acceptor用于接收该地址的TCP连接请求。              ...和地址peerAddr返回给使用者,这里TcpServer在构造时通过accptor_->setNewConnectionCallback(bind(&TcpServer::newConnection,...TcpConnection::closeCallback()不是给用户使用的,而是通知TcpServer或TcpClient移除它们容器中的TcpConnectionPtr。该函数如何设定的呢?...Tcpserver中erase掉这个TcpConnectionPtr。 13 class Connector:用于发起连接,当socket变得可写时表示连接建立完毕,其间需要处理各种类型的错误。

    76910

    C++ ASIO 实现异步套接字管理

    特别适用于网络应用程序的开发,从基本的网络通信到复杂的异步操作,如远程控制程序、高并发服务器等都可以使用该框架。该框架的优势在于其允许处理多个并发连接,而不必创建一个线程来管理每个连接。...代码逻辑较为简单,但为了保证可靠性和稳定性,实际应用中需要进一步优化、处理错误和异常情况,以及增加更多的功能和安全性措施。...并在调用tcpServer.Send时将所需参数,套接字ID,缓冲区Buf数据,以及长度传递即可实现将数据发送给指定的客户端;// 同步发送数据到指定的线程中void send_message(CAsyncTcpServer...100if (vecSegTag.size() == 3 && vecSegTag[0] == "GetMemory"){char* id = (char*)vecSegTag[2].c_str();...() == 3 && vecSegTag[0] == "Exit"){char* id = (char*)vecSegTag[2].c_str();send_message(tcpServer, atoi

    52920

    【Linux】Socket编程—TCP

    bind() 介绍:服务器程序所监听的网络地址和端口号通常是固定不变的,客户端程序得知服务器程序的地址和端口号后就可以向服务器发起连接; 服务器需要调用 bind 绑定一个固定的网络地址和端口号;...将整个结构体清零;   2. 设置地址类型为 AF_INET;   3....()连接服务器; 参数:connect 和 bind 的参数形式一致, 区别在于 bind 的参数是自己的地址, 而 connect 的参数是对方的地址; 返回值: connect()成功返回 0,出错返回...serveraddr.sin_addr.s_addr = INADDR_ANY; // 表示可以接收任意地址的信息 // 2. bind; int n = ::bind...使用服务器代码如下: #include "TcpServer.hpp" int main() { std::unique_ptrTcpServer> tcpserver = std::

    8810

    高级IO(epoll)(ET)

    只要缓冲区中的数据没读完, 就能够让 epoll_wait 返回文件描述符读就绪. epoll的使用场景 epoll的高性能, 是有一定的特定场景的....对于多连接, 且多连接中只有一部分连接比较活跃时, 比较适合使用epoll. 例如, 典型的一个需要处理上万个客户端的服务器, 例如各种互联网APP的入口服务器, 这样的服务器就很适合epoll....同时,listensock和Connection放进_connections 2.添加到unordered_map 3.我们添加对应的事件,除了要加到内核中,fd,event 两个错误信号 EWOULDBLOCK...处理方式 在非阻塞 I/O 模式下,通常需要重试操作或使用多路复用(如 select())。 程序通常需要检查返回的 EINTR 错误,并根据需要重试操作。...(&TcpServer::Recver, this, placeholders::_1), bind(&TcpServer::Sender,

    9310

    C++ ASIO 实现异步套接字管理

    特别适用于网络应用程序的开发,从基本的网络通信到复杂的异步操作,如远程控制程序、高并发服务器等都可以使用该框架。该框架的优势在于其允许处理多个并发连接,而不必创建一个线程来管理每个连接。...代码逻辑较为简单,但为了保证可靠性和稳定性,实际应用中需要进一步优化、处理错误和异常情况,以及增加更多的功能和安全性措施。...并在调用tcpServer.Send时将所需参数,套接字ID,缓冲区Buf数据,以及长度传递即可实现将数据发送给指定的客户端; // 同步发送数据到指定的线程中 void send_message(CAsyncTcpServer...100 if (vecSegTag.size() == 3 && vecSegTag[0] == "GetCPU") { char *id = (char *)vecSegTag[2]...id 100 if (vecSegTag.size() == 3 && vecSegTag[0] == "Exit") { char* id = (char*)vecSegTag[2]

    29550

    python实现socket通讯(UDP)

    端的socket一般流程是这样: 建立一个socket(可以选择socket类型INET,UNIX等,以及连接方式TCP/UDP) 使用bind公开一个端口,使得client可以方便连接 设置一个listen...队列的大小 进入一个无限循环,在此无限循环中,使用accept函数来等待客户连接,此函数返回一个新的socket, 对应于客户端的socket,建立通信信道。...() client端 建立一个新的socket 使用connect函数与远程主机获得连接 在此socket上进行I/O操作 netclient.py #!...========================================== UDP方式 UDP号称无连接传输,全然没有TCP那么复杂,三次握手,错误重传之类的机制都没有,发的只管发,收得只管收...()  需要注意的是,server中address元组中的引号表示可以接受任何地址来的数据报,TCP例子中的则表示可以接受任意地址发起的连接。

    1.4K20
    领券