网络编程学习笔记(recvfrom和sendto函数)
其原型为:
#include <sys/socket.h>ssize_t recvfrom(int sockfd, void *buff, size_t nbytes, int flags, struct sockaddr *from, socklen_t *addrlen);ssize_t sendto(int sockfd, void *buff, size_t nbytes, const struct sockaddr* to, socklen_t addrlen);
服务器端:
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>#define SERV_PORT 9999
#define BUF_LEN 128void dg_echo(int sockfd, struct sockaddr_in *pcliaddr, socklen_t clilen)
{char buf[BUF_LEN]; socklen_t len;int n;for (;;) {len = clilen;if ((n = recvfrom(sockfd, buf, BUF_LEN, 0, (struct sockaddr*)pcliaddr, &len)) < 0) {printf("recvfrom error:%s\n", strerror(errno));continue;} sendto(sockfd, buf, n, 0, (struct sockaddr*)pcliaddr, len);}
}int main(int argc, char **argv)
{struct sockaddr_in servaddr, clientaddr;int sockfd;sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) {printf("socket error:%s\n", strerror(errno));return -1;}memset(&servaddr, 0x00, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(SERV_PORT);if (bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0) {printf("bind error:%s\n", strerror(errno));close(sockfd); return -1;}dg_echo(sockfd, &clientaddr, sizeof(clientaddr));return 0;
}
客户端:
#include <sys/socket.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <netinet/in.h>#define SERV_PORT 9999
#define BUF_LEN 128void dg_cli(FILE *fp, int sockfd, const struct sockaddr_in * pservaddr, socklen_t servlen)
{int n;char sendline[BUF_LEN], recvline[BUF_LEN];while (fgets(sendline, BUF_LEN, fp) != NULL) {sendto(sockfd, sendline, strlen(sendline), 0, (struct sockaddr*)pservaddr, servlen); n = recvfrom(sockfd, recvline, BUF_LEN, 0, NULL, NULL);recvline[n] = 0;fputs(recvline, stdout);}
}int main(int argc, char **argv)
{struct sockaddr_in servaddr;int sock;memset(&servaddr, 0x00, sizeof(servaddr)); servaddr.sin_family = AF_INET;servaddr.sin_port = htons(SERV_PORT); if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) < 0) {printf("inet_pton error:%s\n", strerror(errno));return -1;}sock = socket(AF_INET, SOCK_DGRAM, 0); if (sock < 0) {printf("socket error:%s\n", strerror(errno));return -1;}dg_cli(stdin, sock, &servaddr, sizeof(servaddr));return 0;
}
网络编程学习笔记(recvfrom和sendto函数)相关推荐
- 网络编程学习笔记(recvmsg和sendmsg函数)
这两个函数是最通用的I/O函数.实际上,可以用recvmsg代替read.readv.recv和redvfrom.同样,各种输出函数都可以用sendmsg取代 #include<sys/sock ...
- 网络编程学习笔记(recv和send函数)
与read和write函数相似,只是多了一个附加的参数,其函数原型为: #include <sys/socket.h> ssize_t recv(int sockfd, void *buf ...
- 网络编程学习笔记(UDP的connect函数)
对于已连接的UDP套接口,发生了三个变化: 1.再也不能给输出操作指定目的IP地址和端口,也就是说,不能再调用 sendto,而使用send或者write.写到已连接UDP套接口上的任何东西都自动发送 ...
- 网络编程学习笔记(getservbyname和getservbyport函数)
通过服务器的名字而不是服务器端口号来认知它,而且如果从主机到端口号的映射包含在一个文件中(一般是/etc/services),则如果端口号改变,我们所需做的所有改动就是改动文件/etc/service ...
- 网络编程学习笔记(recvfrom很奇怪的一个地方)
recvfrom的最后一个参数不赋值时,返回的是一个很大的数.赋值后就是正常的 服务器端: #include <sys/socket.h> #include <netinet/in. ...
- 网络编程学习笔记(readv和writev函数)
这两个函数与read和write相似,但readv和writev可以让我们在一个函数调用中读取多个缓冲区,这些操作被称为分散读和集中写.其函数原型为: #include <sys/uio.h&g ...
- 网络编程学习笔记(getsockopt和setsockopt函数)
其原型为: #include <sys/socket.h> int getsockopt(int sockfd, int level, int optname, void *optval, ...
- java 网络编程学习笔记
java 网络编程学习笔记 C/S模式:客户端和服务器 客户端创建流程 1 1.建立Socket端点 2 3 Socket s = new Socket(绑定地址, 绑定端口); 2.确认源数据方式和 ...
- [Linux网络编程学习笔记]索引
一.Linux基本知识 [学习笔记]Linux平台的文件I/O操作 [学习笔记]Linux平台的文件,目录及操作 [Linux学习笔记]标准输入输出 [Linux学习笔记]进程概念及控制 [Linux ...
最新文章
- arduino小车前进代码_基于Arduino操纵杆扩展板Funduino制作机器人小车
- 敏捷结果30天之第六天:周五回顾,找到三件做的好以及三件需要改善的事情...
- javascript闭包-全局变量与局部变量
- JAVA-retry 重试
- ES6语法大全 export,import,for.of循环,promise等等
- JAVA里16进制和字节数组互转
- 最小花费(信息学奥赛一本通-T1344)
- python封装sql脚本_flask-sqlalchemy如何使用原生的sql语句然后封装?
- mysql.sys用户权限_MySQL用户及权限小结
- python微信自动发消息系统
- 一种电力线宽带载波系统采样频偏的估计方法
- 人工智能--符号计算--笔记
- 键盘没有NumLock这个键 怎样解锁数字键盘?
- 详解cmd修复系统命令操作方法
- 使用杉川3i-T1单线激光雷达和Cartographer库SLAM问题及解决
- mysql设置固定ip地址访问_mysql设置指定ip访问,用户权限相关操作
- can't create transaction lock on /var/lib/rpm/.rpm.lock (Permission denied)
- 【leetcode-DFS】求根节点到叶节点数字之和/二叉树的最大路径和/路径总和/左叶子之和/树的直径
- Python新闻网站项目-5.Django新闻网站前后端展示
- cad坐标归零lisp_CAD图如何归零?
热门文章
- Ubuntu安装Nginx+PHP+Memcache+Mysql指导手册
- Linux常用命令速查备忘(包括我)
- TM、XWT和Wazaabi
- python简单代码表白-如何正确使用Python进行表白
- python是不是特别垃圾-11道Python最基本的面试题,不会好好反思吧!
- 济南python工资一般多少钱-济南python开发培训机构哪个好
- 对于python来说、一个模块就是一个文件-彻底明白Python package和模块
- 学python需要学数据库吗-python支持哪些数据库
- 以下属于python标准库的选项是-Python 标准库一览(Python进阶学习)
- python下载文件到指定目录-Python获取指定文件夹下的文件名的方法