UNIX网络编程卷一:第一章 简单的客户端服务器程序
来源:互联网 发布:声卡mc录音软件 编辑:程序博客网 时间:2024/05/16 08:00
// 从服务器读取时间// client.c#include <sys/types.h>#include <sys/socket.h>#include <stdio.h> #include <stdlib.h> // exit#include <netinet/in.h> // socketaddr_in #include <strings.h> // bzero#include <arpa/inet.h> // inet_pton#include <unistd.h> // read#define MAXLINE 4096 /* max text line length */#define PORT 8888int main(int argc, char ** argv){ int sockfd, n; char recvline[MAXLINE + 1]; struct sockaddr_in servaddr; if (argc != 2) { fprintf(stderr, "Usage: %s IP\n", argv[0]); exit(1); } // 创建套接字 if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { fprintf(stderr, "socket error\n"); exit(1); } bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(PORT); // 端口号使用网络字节序 if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <=0) {// 将ip地址由字符串,转换位2进制 fprintf(stderr, "inet_pton error for: %s", argv[1]); exit(1); } // 连接服务器, 后续使用该套接字进行通信 if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) { fprintf(stderr, "connect error: %s\n", argv[1]); perror("connect error:"); exit(1); } // 与服务器进行通信 while( (n = read(sockfd, recvline, MAXLINE)) > 0) { recvline[n] = 0; if (fputs(recvline, stdout) == EOF) { fprintf(stderr, "fputs error\n"); exit(1); } } if(n < 0) { fprintf(stderr, "read error\n"); exit(1); } return 0;}
// server.c#include <sys/types.h>#include <sys/socket.h>#include <stdio.h> #include <stdlib.h> // exit#include <netinet/in.h> // socketaddr_in #include <strings.h> // bzero#include <arpa/inet.h> // inet_pton#include <unistd.h> // read#include <time.h> // time#include <string.h> // strlen#defineMAXLINE4096/* max text line length */#define PORT 8888int main(int argc, char ** argv){ struct sockaddr_in servaddr; int listenfd, connfd; char buff[MAXLINE]; time_t ticks; // 创建套接字 listenfd = socket(AF_INET, SOCK_STREAM, 0); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; // INADDR_ANY : 如果服务器有多个网络接口,那么服务器可以在任意网络接口上接受客户连接 servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(PORT); // 将该套接字与地址绑定 bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr)); // 把该套接字,变成监听套接字 // 这样,来自客户到外来连接就可以在该套接字上由内核接受 // socket, bind, listen 是TCP服务器准备“监听套接字” 的正常步骤 listen(listenfd, 5); for(;;) { // 服务器睡眠,等待客户端连接 // 经过 TCP 3次握手 // 返回一个 “已连接描述符” connfd = accept(listenfd, (struct sockaddr *) NULL, NULL); // 发送时间给客户端 ticks = time(NULL); snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks)); write(connfd, buff, strlen(buff)); // 关闭连接 close(connfd); } return 0;}
遇到的问题
error: storage size of ‘servaddr’ isn’t known struct sockaddr_in servaddr;
添加头文件: netinet/in.h
#include <netinet/in.h>
see $ man 7 ip for more help
0 0
- UNIX网络编程卷一:第一章 简单的客户端服务器程序
- 《UNIX网络编程》第一章——一个简单的时间获取客户端/服务器程序
- unix网络编程卷一: 第八章:简单UDP客户端服务器通信(一)
- UNIX网络编程卷一 第一章 简介
- unix网络编程卷一: 第八章:简单UDP客户端服务器通信(二)-解决客户端一直等待问题
- Unix网络编程(卷一)-第一个简单的时间获取程序
- unix网络编程卷一: 第五章:服务器反射客户端消息(一)
- UNIX网络编程卷一 笔记 第一章 简介
- 学习 UNIX网络编程卷1:套接字 笔记1-实现一个简单的回射客户服务器程序
- UNIX网络编程练习-简单的时间服务器和客户端
- unix网络编程卷1 时间获取客户端程序
- UNIX网络编程卷一 笔记 第五章 TCP客户/服务器程序示例
- UNIX网络编程卷一:第五章 TCP客户/服务器程序实例
- UNIX网络编程卷一 第五章 TCP客户/服务器程序示例
- UNIX网络编程 UNP 卷2 第一章
- 简单的获取服务器时间程序(UNIX网络编程)
- Unix网络编程卷一: 从服务器获取时间信息(三)-daytimetcpcli2客户端每次执行结果不同
- Unix 网络编程卷一- 学习笔记
- [MFC]传统控件介绍、CButton按钮类
- 字符串匹配——朴素算法
- openmesh中常用的几个文件夹
- Swift学习笔记(一)基础操作
- iOS开发学习之Json解析
- UNIX网络编程卷一:第一章 简单的客户端服务器程序
- 只用CSS实现网页常用的列表左右对齐
- Linux ./configure
- OC中的数组
- ThinkPHP上传文件总结
- Java — 冒泡、选择、插入排序法
- Netty系列之Netty高性能之道
- android日常开发总结的技术经验60条
- 杭电汉字统计