目录

1.        send()函数

2.        recv()函数



1.        send()函数

函数原型:ssize_t send(int sockfd, const void *buf, size_t len, int flags);

功能:向套接字中发送数据

参数:sockfd:向套接字中发送数据

buf:要发送的数据的首地址

len:要发送的数据的字节

int flags:设置为MSG_DONTWAITMSG 时 表示非阻塞

设置为0时 功能和write一样

返回值:成功返回实际发送的字节数

失败:返回 -1

2.        recv()函数

函数原型:ssize_t recv(int sockfd, const void *buf, size_t len, int flags);

功能:向套接字中发送数据

参数:sockfd:在哪个套接字接

buf:存放要接收的数据的首地址

len:要接收的数据的字节

int flags:设置为MSG_DONTWAITMSG 时 表示非阻塞

设置为0时 功能和read一样

返回值:成功返回实际发送的字节数

失败:返回 -1

示例:

//关于tcp的程序,里面应用了send和rec这个程序有客户端和服务器两部分,改一下里面的ip地址为自己的ip就可以玩了。//服务器部分
#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>int main(){//1.创建套接字   int sockfd = socket(AF_INET, SOCK_STREAM, 0);if(-1 == sockfd){perror("socket error");exit(-1);}//创建服务器网络信息结构体  struct sockaddr_in server_addr;memset(&server_addr, 0, sizeof(server_addr));//清空//2.填充服务器网络信息结构体server_addr.sin_family = AF_INET;//网络字节序的端口号,可以是 8888  9999 6789 等都可以server_addr.sin_port = htons(8888);//IP地址//不能随便填,可以填自己主机的IP地址//如果只是在本地测试,也可以填 127.0.0.1server_addr.sin_addr.s_addr = inet_addr("192.168.70.95");socklen_t addrlen = sizeof(server_addr);//3.将套接字和网络信息结构体进行绑定---相当于把卡插入手机里if(-1 == bind(sockfd, (struct sockaddr *)&server_addr, addrlen)){perror("bind error");exit(-1);}//4.将服务器的套接字设置成被动监听状态if(-1 == listen(sockfd, 5)){perror("listen error");exit(-1);}//定义一个结构体,保存客户端的信息struct sockaddr_in client_addr;memset(&client_addr, 0, sizeof(client_addr));//清空socklen_t clientaddrlen = sizeof(client_addr);//5.阻塞等待客户端连接int acceptfd = accept(sockfd, (struct sockaddr *)&client_addr, &clientaddrlen);if(-1 == acceptfd){perror("accept error");exit(-1);}printf("客户端 %s:%d 连接到服务器了\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));//6.与客户端通信char buff[128] = {0};read(acceptfd, buff, 128);printf("%s-%d:[%s]\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port), buff);strcat(buff, "--hqyj");write(acceptfd, buff, 128);//7.关闭套接字close(acceptfd);close(sockfd);return 0;
}
//客户端部分#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>int main(){//1.创建套接字int sockfd = socket(AF_INET, SOCK_STREAM, 0);if(-1 == sockfd){perror("socket error");exit(-1);}struct sockaddr_in server_addr;memset(&server_addr, 0, sizeof(server_addr));//清空//2.填充服务器网络信息结构体 --需要指定连接哪个服务器server_addr.sin_family = AF_INET;//网络字节序的端口号,可以是 8888  9999 6789 等都可以server_addr.sin_port = htons(8888);//IP地址//不能随便填,可以填自己主机的IP地址//如果只是在本地测试,也可以填 127.0.0.1server_addr.sin_addr.s_addr = inet_addr("192.168.70.95");socklen_t addrlen = sizeof(server_addr);//3.与服务器建立连接if(-1 == connect(sockfd, (struct sockaddr *)&server_addr, addrlen)){perror("connect error");exit(-1);}//4.与服务器通信char buff[128] = {0};fgets(buff, 128, stdin);buff[strlen(buff)-1] = '\0';//清除 \nwrite(sockfd, buff, 128);read(sockfd, buff, 128);printf("收到回复:[%s]\n", buff);//5.关闭套接字close(sockfd);return 0;

send()函数recv()函数详解相关推荐

  1. linux内核中send与recv函数详解

    Linux send与recv函数详解 1.简介 #include <sys/socket.h> ssize_t recv(int sockfd, void *buff, size_t n ...

  2. linux send与recv函数详解

    linux send与recv函数详解 1 #include <sys/socket.h> 2 ssize_t recv(int sockfd, void *buff, size_t nb ...

  3. linux Socket send与recv函数详解

    转自:http://www.cnblogs.com/blankqdb/archive/2012/08/30/2663859.html linux send与recv函数详解 1 #include &l ...

  4. c语言中getenv的作用,C语言putenv()函数和getenv()函数的使用详解

    C语言putenv()函数和getenv()函数的使用详解 C语言putenv()函数:改变或增加环境变量头文件: #include4 定义函数: int putenv(const char * st ...

  5. python中exchange函数使用_python基于exchange函数发送邮件过程详解

    python基于exchange函数发送邮件过程详解 作者: shuzihua 更新时间:2020-11-06 10:40:35 原文链接 1.Python hasattr() 函数 描述 hasat ...

  6. 利用栈求表达式的值_高一数学月考考点之函数的表达式详解

    函数表达式考点详解,教你轻松学函数 Hello,大家好,这里是摆渡学涯.很高兴在这里跟大家分享知识哦.这次课程我们来为大家讲一下函数表达式相关的考点,教你轻松学函数. 基本概念 什么是函数表达式呢?我 ...

  7. python时间函数报错_python3中datetime库,time库以及pandas中的时间函数区别与详解...

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  8. python命名空间和闭包_Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】...

    本文实例讲述了Python函数基础用法.分享给大家供大家参考,具体如下: 一.什么是命名关键字参数? 格式: 在*后面参数都是命名关键字参数. 特点: 1.约束函数的调用者必须按照Kye=value的 ...

  9. countif和sum套用_if函数嵌套countif、sumif函数实例操作详解 你需要学习了

    excel中if函数嵌套countif函数实例操作详解,需要了解if函数.countif函数.sumif函数字符串引用方式,isblank函数 操作方法 01 用扫描枪连接excel后将自动将货物名称 ...

  10. php函数find的用法,c语言find函数的用法详解

    c语言find函数的用法详解 C语言之find()函数 find函数用于查找数组中的某一个指定元素的位置. 比如:有一个数组[0, 0, 5, 4, 4]: 问:元素5的在什么位置,find函数 返回 ...

最新文章

  1. Android开源工具库
  2. 用友2020校招java笔试题_用友Java类笔试题大全
  3. python array函数_Python 中的range()函数与array()函数
  4. 高中生住校好还是走读好?为什么?
  5. 1 linux网络诊断命令工具
  6. 设计模式-工厂模式(二)
  7. 【三维路径规划】基于matlab遗传算法无人机三维路径规划【含Matlab源码 1268期】
  8. 手把手教你开发BLE数据透传应用程序
  9. android Account
  10. [USACO13FEB]拖拉机Tractor
  11. IOS逆向(1)IOS越狱
  12. Linux下Mysql启动、关闭、重启指令
  13. 【Java并发编程的艺术】读书笔记——Java并发编程基础
  14. 如何将视频分割成几部分 视频剪切软件哪个好
  15. 快速上手CH340N电路设计(CH340N USB转串口模块 USB Type-C接口 CH340系列芯片讲解)
  16. C# 待用户确认对话框(确定/取消)
  17. 图像分割基础算法及实现实例
  18. 利用预训练网络打造自己的分类网络
  19. TestDirector介绍
  20. 【Python】 Python编程基础练习100题学习记录第二期(11~20)

热门文章

  1. 4.1Reduction模型
  2. 15个“在线配色方案”工具网站
  3. Android中 Download Manager系统下载管理器在Android 10系统中无法使用的情况
  4. python3 获取/备份 iPhone icloud云端 中相关数据
  5. 7XX元一线P35,华硕P5K-SE VS技嘉P35-DS3L谁超频能力更强?
  6. 31年前的Beyond演唱会,是如何超清修复的?(推荐)
  7. 沟通新法则:请不要一个人吃饭
  8. bootstrap实战--微金所项目(导航栏)
  9. 【愚公系列】2022年03月 .NET架构班 021-ABP vNext 动态代理模块
  10. k8s 1.20,IPv4/IPv6 双协议栈