网络编程学习笔记(recvfrom和sendto函数)
2014-09-27 17:02
211 查看
其原型为:
服务器端:
客户端:
#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 128 void 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 128 void 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 = 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很奇怪的一个地方)
- Java 网络编程 TCP vs UDP -Java学习笔记(31)
- Java学习笔记(七、网络编程基础)
- Java学习笔记之网络编程基础-通过URLConnection获取HTML页面
- 孙鑫VC学习笔记:第十四讲 网络编程
- [Linux网络编程学习笔记]索引
- 孙鑫VC学习笔记:第十四讲 (二) 网络编程
- 学习笔记--网络编程
- Java学习笔记之网络编程基础-根据域名自动到DNS上获取IP地址
- [Linux网络编程学习笔记]套接字地址结构
- C#网络编程学习笔记1
- 《Web Service 编程 --用C#.NET 开发网络服务》北京希望出版社 我的学习笔记(第二章)(也就是书上抄了一写东西而已)
- 《Web Service 编程 --用C#.NET 开发网络服务》北京希望出版社 我的学习笔记(第一章)(也就是书上抄了一写东西而已)
- Java 网络编程 学习笔记一 基础知识
- Java网络编程---I/O部分学习笔记整理
- 网络编程学习笔记
- java NIO非阻塞式IO网络编程学习笔记(一)
- [Linux网络编程学习笔记]管道的创建和使用
- [零散篇]Java学习笔记---Java的Socket网络编程以及多线程
- Java学习笔记之网络编程基础-通过URL获取网络图片