unix网络编程卷一: 第八章:简单UDP客户端服务器通信(一)
来源:互联网 发布:制作pdf的软件 编辑:程序博客网 时间:2024/05/16 17:58
服务器代码 udpserv01.c:
#include "unp.h"
int main(int argc, char **argv)
{
intsockfd;
struct sockaddr_inservaddr, cliaddr;
sockfd = Socket(AF_INET, SOCK_DGRAM,0);//创建socket
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
Bind(sockfd, (SA *) &servaddr,sizeof(servaddr));//绑定socket
dg_echo(sockfd, (SA *) &cliaddr,sizeof(cliaddr));//具体处理和客户端之间的通信
}
#include "unp.h"
void dg_echo(int sockfd, SA *pcliaddr, socklen_t clilen)
{
intn;
socklen_tlen;
charmesg[MAXLINE];
for ( ; ; ) {
len = clilen;
n = Recvfrom(sockfd, mesg, MAXLINE,0, pcliaddr, &len);//获取客户端发来的消息
Sendto(sockfd, mesg, n,0, pcliaddr, len);//发送消息给客户端
}
}
#include "unp.h"
int main(int argc, char **argv)
{
intsockfd;
struct sockaddr_inservaddr;
if (argc !=2)
err_quit("usage: udpcli <IPaddress>");
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
Inet_pton(AF_INET, argv[1], &servaddr.sin_addr);//转换格式
sockfd = Socket(AF_INET, SOCK_DGRAM,0);//创建socket
dg_cli(stdin, sockfd, (SA *) &servaddr,sizeof(servaddr)); //具体处理和服务器的通信
exit(0);
}
#include "unp.h"
void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen)
{
intn;
charsendline[MAXLINE], recvline[MAXLINE +1];
while (Fgets(sendline, MAXLINE, fp) !=NULL) {//从输入设备获取信息
Sendto(sockfd, sendline, strlen(sendline),0, pservaddr, servlen);//向服务器发送信息
n = Recvfrom(sockfd, recvline, MAXLINE,0,NULL, NULL);//接受服务器发来的信息
recvline[n] = 0;/* null terminate */
Fputs(recvline, stdout);//显示到输出设备
}
}
➜ udpcliserv ./udpserv01
➜ udpcliserv ./udpcli01 127.0.0.1
sh-3.2# tcpdump -i lo0 port 9877
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo0, link-type NULL (BSD loopback), capture size 65535 bytes
➜ udpcliserv ./udpcli01 127.0.0.1
hello
hello
sh-3.2# tcpdump -i lo0 port 9877
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo0, link-type NULL (BSD loopback), capture size 65535 bytes
15:08:06.567545 IP localhost.57676 > localhost.9877: UDP, length 6
15:08:06.567653 IP localhost.9877 > localhost.57676: UDP, length 6
客户端和服务器谁先启动都无所谓,但是注意的一点,如果客户端先启动了,并且发送了消息,此时服务器还未启动,那么客户端会阻塞,即便当服务器启动了之后,客户端也一直会阻塞!
- unix网络编程卷一: 第八章:简单UDP客户端服务器通信(一)
- unix网络编程卷一: 第八章:简单UDP客户端服务器通信(二)-解决客户端一直等待问题
- UNIX网络编程卷一:第八章 I/O UDP
- UNIX网络编程卷一:第一章 简单的客户端服务器程序
- unix网络编程卷一: 第五章:服务器反射客户端消息(一)
- unix网络编程卷一: 第八章:mac下默认英文单词和中文汉字占内存大小
- UNIX网络编程卷一:第二章 传输层:TCP、UDP
- UNIX网络编程卷一 第二章 传输层TCP UDP SCTP
- Python网络编程之socket编程(一)--使用TCP和UDP客户端和服务器通信
- 《UNIX网络编程卷1》读书笔记--第八章基本UDP套接字编程
- Unix网络编程卷一: 从服务器获取时间信息(三)-daytimetcpcli2客户端每次执行结果不同
- UNIX网络编程卷一 笔记 第五章 TCP客户/服务器程序示例
- UNIX网络编程卷一:第五章 TCP客户/服务器程序实例
- UNIX网络编程卷一:第十三章 守护进程和inetd超级服务器
- UNIX网络编程卷一:第三十章 客户/服务器程序设计范式
- UNIX网络编程卷一 第五章 TCP客户/服务器程序示例
- Unix 网络编程卷一- 学习笔记
- unix网络编程(卷一)--安装源码
- (四)Linux网络编程--4. 完整的读写函数
- android Timer TimerTask Handler 设备震动
- undefined format 未定界形式, 不定长形式
- java.lang.Throwable: Warning: A WebView methods must be called on the same thread.
- udig+postgresql
- unix网络编程卷一: 第八章:简单UDP客户端服务器通信(一)
- Ibaits操作二进制数据的一些小技巧
- mkdir命令
- Linux进程间通信——命名管道
- POJ_2446_Chessboard(二分图匹配)
- 使用spring @Scheduled注解执行定时任务
- MySQL第二天早上第一次连接超时报错,解决方法com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
- 表达式的使用
- (五)Linux网络编程--5. 用户数据报发送