网络:简单的TCP网络程序

简单的TCP网络程序

其流程如下:
在这里插入图片描述

listen()

设置监听
在这里插入图片描述

int listen(int sockfd, int backlog);

  • sockfd:侦听套接字,socket函数的返回值;
  • backlog:已完成连接队列的大小;
    当我们调用该函数后,也就是告诉内核,其中的程序可以接收新的连接了,(即:可以完成三次握手的过程了);
  • 返回值:成功返回0,失败返回-1;
    在这里插入图片描述
  • listen();声明sockfd处于监听的状态,并且最多允许有backlog个客户端处于连接等待状态,如果接收到更多的连接请求就忽略,这里设置不会太大(一般是5);
  • 测试backlog为1时,它可以建立2个连接;

accept()

接收函数
在这里插入图片描述

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

  • sockfd:侦听套接字,socket函数的返回值;
  • addr:对端的地址信息,客户端的地址信息;
  • addrlen:对端的地址信息,客户端地址信息的长度;
  • 返回值:
    正常:返回的是为新连接创建出来的套接字;
    失败:小于0;

要点:
1.accept()函数是再三次握手完成之后进行调用的;
2.给addr参数传NULL代表不关心你客户端的地址;
3.addr是一个传出参数,accept()函数在返回时传出客户端的地址和端口号;
4.获取新连接是从“已完成连接队列”当中获取新连接;
如果已完成连接队列未空,调用该接口,执行流会被阻塞

connect()

在这里插入图片描述

int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

  • sockfd:客户端调用socket创建出来的套接字描述符;
  • addr:要连接的服务端的地址信息;
  • addrlen:地址信息的长度;

send()

发送数据
在这里插入图片描述

ssize_t send(int sockfd, const void *buf, size_t len, int flags);

  • sockfd
    客户端:调用socket创建出来的套接字描述符;
    服务端:accpet()函数的返回值;
  • buf:待发送的数据;
  • len:发送数据的长度;
  • flags:0 阻塞发送;

recv()

接收数据
在这里插入图片描述

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

  • sockfd
    客户端:调用socket创建出来的套接字描述符;
    服务端:accpet()函数的返回值;
  • buf:接收数据使用的缓冲区;
  • len:最大接收能力;
  • flags:0 阻塞接收;
  • 返回值:
    > 0:接收了多少字节数据;
    =0:对端关闭了连接;
    <0:发送失败;

服务端:
svr.cpp

#include <stdio.h>                                                            
#include <unistd.h>

#include <string.h>

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <iostream>

int main()
{
   
    int listen_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(listen_sock < 0)
    {
   
        perror
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值