当前位置: 首页 > news >正文

Day 8.TCP通信

TCP通信

TCP发端:

socket

connect

send

recv

close

TCP收端:

socket

bind

listen

accept

send

recv

close

1.connect

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

功能:发送链接请求

参数:sockfd:套接字文件描述符

addr:目的地址存放空间首地址

addrlen:IP地址的大小

返回值:成功返回0;失败返回-1;

2.send

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

功能:发送数据

参数:sockfd:文件描述符

buf:发送数据空间首地址

len:发送数据的长度

flags:属性默认为0 

返回值:成功返回实际发送的字节数;失败返回-1;

3.recv

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

功能:接受数据

参数:sockfd:套接字文件描述符 

buf:存放数据空间首地址

len:最大接收数据的长度

flags:属性默认为0 

返回值:成功返回实际字节数;失败返回-1;如果对面退出,返回0;

4.listen

 int listen(int sockfd, int backlog);

功能:监听客户端发送的链接请求(该函数不会被阻塞)

参数:sockfd:套接字文件描述符

backlog:允许等待的尚未被处理的三次握手请求的最大个数

返回值:成功返回0 ;失败返回-1 

5.accpet

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

功能:处理等待链接队列中的第一个链接请求,该函数具有阻塞功能(如果没有人发送链接请求,回阻塞等待)

参数:socket:套接字文件描述符

address:存放IP地址的空间首地址

addrlen:存放IP地址大小空间首地址

返回值:成功返回一个新的文件描述符,失败返回-1;

#include "head.h"int main(void)
{int sockfd = 0;struct sockaddr_in sendaddr;ssize_t nsize = 0;int ret = 0;char tmpbuff[1024] = {0};sockfd = socket(AF_INET, SOCK_STREAM, 0);if (sockfd == -1){perror("fail to socket");return -1;}sendaddr.sin_family = AF_INET;sendaddr.sin_port = htons(50000);sendaddr.sin_addr.s_addr = inet_addr("192.168.1.110");ret = connect(sockfd, (struct sockaddr *)&sendaddr, sizeof(sendaddr));if (ret == -1){perror("fail to connect");return -1;}gets(tmpbuff);nsize = send(sockfd, tmpbuff, strlen(tmpbuff), 0);if (nsize == -1){perror("fail to send");return -1;}memset(tmpbuff, 0, sizeof(tmpbuff));nsize = recv(sockfd, tmpbuff, sizeof(tmpbuff), 0);if (nsize == -1){perror("fail to recv");return -1;}printf("RECV:%s\n",tmpbuff);close(sockfd);return 0;}

http://www.lryc.cn/news/313037.html

相关文章:

  • 小游戏加固方案已全面适配微信、QQ、抖音、快手、美团、华为、支付宝渠道
  • 粉色ui微信小程序源码/背景图/头像/壁纸小程序源码带流量主
  • chrome选项页面options page配置
  • 迭代器失效问题(C++)
  • 2-web端管理界面使用rabbitmq
  • 【华为OD机试】最多购买宝石数目【C卷|100分】
  • RK3588 Android 12 源码编译与开发板烧录
  • 学习JAVA的第十四天(基础)
  • 安捷伦N5182A信号源 AgilentN5182A
  • 就业班 2401--3.7 Linux Day13--日志轮转+jumpserver堡垒机
  • 信息安全概论 习题
  • 仓储管理系统(WMS) 的研发历程-PRD撰写
  • springboot实现多线程开发(使用@Async注解,简单易上手)
  • 并发支持库(1)-线程
  • 2024年最新阿里云服务器地域选择方法,以及可用区说明
  • Frida实战:Java、Native、SO层面的Hook与主动调用详解
  • Codeforces Round 883 (Div. 3)(集训队加训1)
  • 自封装 bind 方法(二)
  • vcomp140.dll丢失如何修复,5种修复方法轻松搞定vcomp140.dll问题
  • 计算机视觉(Computer Vision)和机器视觉(Machine Vision)
  • 国内用ChatGPT可以吗
  • 数据分析-Pandas两种分组箱线图比较
  • Mac版2024 CleanMyMac X 4.14.6 核心功能详解以及永久下载和激活入口
  • Java引用传递及基本应用
  • 低代码测试自动化
  • Linux 文件操作命令
  • 机器学习-面经(part8、贝叶斯和其他知识点)
  • 图数据库 之 Neo4j - 应用场景3 - 知识图谱(8)
  • redis 性能优化三
  • Python用Tkinter实现圆的半径 面积 周长 知一求二程序