tcp发送数据:

1 #include <sys/types.h>
2 #include <socket.h>
3 ssize_t send(int sockfd,const void *msg,size_t len,int flags);

函数send只能对面向连接的套接字使用。参数sockfd为已经建立好连接的套接字描述符。参数msg指向待发送数据的缓冲区,参数len为代发数据的长度。参数flags为控制选项:

  • MSG_OOB:在指定的套接字上发送带外数据(out-of-band data),该类型的套接字必须支持带外数据(如SOCK_STREAM)。

  • MSG_DONTROUTE:通过最直接的路径发送数据,而忽略下层协议的路由设置。

PS:函数执行成功只是说明数据写入套接字的缓冲区中,并不表示数据已经成功地通过网络发送到目的地。

tcp接收数据:

#include <sys/types.h>
#include <sys/socket.h>
ssize_t recv(int sockfd,void *buf,size_t len,int flags);

函数从sockfd接受数据并保存到参数buf中,参数len为缓冲区的长度。(只能是面向连接的套接字)参数flags为控制选项:

  • MSG_OOB:请求接受带外数据。

  • MSG_PEEK:只查看数据而不读出。

  • MSG_WAITALL:只在接受缓冲区满时才返回。

    如果一个数据报太长以至于无法完全放下时,剩余部分将可能丢弃。如果在指定的套接字上无数据到达时,recv函数将阻塞。成功返回收到的字节数,出错-1,错误代码errno。

UDP发送数据:

#include <sys/types.h>
#include <sys/socket.h>
ssize_t sendto(int sockfd,const void *msg,size_t len,int flags,const struct sockaddr *to,socklen_t tolen);

函数sendto的功能和send类似,但函数sendto不需要套接字一定是面向连接的,所以该函数主要用来发送UDP数据。参数to指定目的地地址。

UDP接收数据:

#include <sys/types.h>
#include <sys/socket.h>
ssize_t recvfrom(int sockfd,void *buf,size_t len,int flags,struct sockaddr *from,socklen_t *fromlen);

函数recvfrom与函数recv类似,但recvfrom不要求套接字一定是面向连接的。如果参数from非空,且该套接字不是面向连接的,则函数返回时,参数from中将保存数据的源地址。

关闭套接字:

#include <unistd.h>
int close(int fd);

#include <sys/socket.h>
int shutdown(int s,int how);

参数how的取值:

  • SHUT_RD:将连接的读通道关闭,接收缓冲区中的未读取数据将丢弃,仍可以发送数据。

  • SHUT_WR:将连接的写通道关闭,发送缓冲区中的为发送的数据丢弃,仍可以接收数据。

  • SHUT_REWR:读写通道都关闭。

  • 成功0,出错-1,errno。

转载于:https://www.cnblogs.com/FootPrintofLeon/p/6492618.html

TCP、UDP套接字的数据传输相关推荐

  1. 网络编程---TCP/UDP套接字编程原理

    本篇介绍的是Linux下的网络编程,故有些接口是不适用于Windows的,但是具体概念和实现方法是大体一致的 本篇重在讲解原理,具体实现请戳这里->UDP套接字编程实现 介绍 网络编程套接字(s ...

  2. TCP/UDP套接字网络协议

    TCP服务端(以字节串传输信息) import socket 1.创建套接字 sockfd = socket.socket(socket_family = AF_INET,socket_type = ...

  3. 计网实验原理-TCP/UDP套接字编程

    计算机网络自顶向下结构--第7版 第二章实验,套接字编程 代码运行环境:window10,python 3.8.对于书上代码略作修改. 进程与计算机网络之间的接口 多数应用程序是由通信进程队组成的,每 ...

  4. TCP/UDP 套接字总结

    参考 <<TCP/IP网络编程>> 伊圣雨 套接字简介 套接字可以连接为计算机为了通信准备的一种标准接口,这个接口函数与操作系统联系紧密,是实现计算机之间通信的重要基础. TC ...

  5. Day09: socket网络编程-OSI七层协议,tcp/udp套接字,tcp粘包问题,socketserver

    今日内容:socket网络编程     1.OSI七层协议     2.基于tcp协议的套接字通信     3.模拟ssh远程执行命令     4.tcp的粘包问题及解决方案     5.基于udp协 ...

  6. 【JavaEE】网络编程之TCP套接字、UDP套接字

    目录 1.网络编程的基本概念 1.1为什么需要网络编程 1.2服务端与用户端 1.3网络编程五元组 1.4套接字的概念 2.UDP套接字编程 2.1UDP套接字的特点 2.2UDP套接字API 2.2 ...

  7. 【网络编程】Socket套接字;UDP数据报套接字编程;TCP流套接字编程

    文章目录 1. 什么是网络编程 2. 网络编程中的基本概念 3. Socket套接字 4 UDP数据报套接字编程 4.1 客户端服务器交互流程 4.2 UDP版本的回显服务 4.3 英译汉服务 5. ...

  8. tcp/ip 协议栈Linux内核源码分析15 udp套接字接收流程二

    内核版本:3.4.39 上篇我们分析了UDP套接字如何接收数据的流程,最终它是在内核套接字的接收队列里取出报文,剩下的问题就是谁会去写入这个队列,当然,这部分工作由内核来完成,本篇剩下的文章主要分析内 ...

  9. tcp/ip 协议栈Linux内核源码分析14 udp套接字接收流程一

    内核版本:3.4.39 前面两篇文章分析了UDP套接字从应用层发送数据到内核层的处理流程,这里继续分析相反的流程,看看数据是怎么从内核送到应用层的. 与发送类似,内核也提供了多个接收数据的系统调用接口 ...

最新文章

  1. 表现层框架Struts/Tapestry/JSF架构比较 [转]
  2. C 语言编程 — Makefile
  3. 学会转变你的思维方式,一切都会变得不一样
  4. linux用户命令权限管理,Linux命令-用户、权限管理
  5. Catch That Cow——BFS
  6. 三星w2014android,三星W2014评测:机身细节及内部设计
  7. Acronis Disk Director 11 Home下载,分区之王
  8. 初学者之路—————Cycle GAN
  9. 图片从服务器在网页显示,spring从服务器磁盘读取图片,然后显示于前端页面上...
  10. JS微信打飞机游戏(一)
  11. JSP实用教程第二章-JSP语法
  12. 【面试系列】计算机网络常见面试题(一)
  13. 数据中心光纤布线的发展趋势
  14. 职业生涯发展理论(精)
  15. Android 签名机制原理解析和V1 、V2签名区别
  16. WebRTC 实现P2P音视频通话——原生IOS端使用WebRTC实现一对一音视频通话
  17. 解决ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
  18. catti二级笔译综合能力真题_catti二级笔译综合能力试题精选及答案解析
  19. 微信小程序自定义分享功能开发笔记
  20. 基于WebSocket的在线聊天室

热门文章

  1. 每天十分钟系列:JS数据操作之神奇的map()
  2. E2017E0605-hm
  3. ubuntu14.04不能安全卸载移动硬盘
  4. jQuery progression 表单进度
  5. 写博客和生产api的工具
  6. [ExtJS5学习笔记]第三十五条 sencha extjs 5 组件查询方法
  7. zoj 3640 概率dp
  8. Lucene.net站内搜索—5、搜索引擎第一版实现
  9. hadooprbac_rbac权限管理系统的学习
  10. Kali linux安装漏洞扫描工具Nessus指南