linux_c_tcp_example
server
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h> #define BUF_SIZE 1024 void err_handler(char *msg); int main(int argc, char **argv) {
int srv_sock, cli_sock;
char msg[BUF_SIZE];
int str_len; struct sockaddr_in srv_addr, cli_addr;
socklen_t cli_adr_sz; if (argc != ) {
printf("Usage : %s <port>", argv[]);
exit();
} srv_sock = socket(PF_INET, SOCK_STREAM, );
if (srv_sock == -) {
err_handler("socket() error");
} memset(&srv_addr, , sizeof(srv_addr));
srv_addr.sin_family = AF_INET;
srv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
srv_addr.sin_port = htons(atoi(argv[])); if (bind(srv_sock, (struct sockaddr *) &srv_addr, sizeof(srv_addr)) == -) {
err_handler("bind() error");
} if (listen(srv_sock, ) == -) {
err_handler("listen() error");
} cli_adr_sz = sizeof(cli_addr); for (int i = ; i < ; ++i) {
cli_sock = accept(srv_sock, (struct sockaddr *) &cli_addr, &cli_adr_sz);
if (cli_sock == -) {
err_handler("accept() error");
} else {
printf("connected client %d\n", i + i);
} while ((str_len = read(cli_sock, msg, BUF_SIZE)) != ) {
write(cli_sock, msg, str_len);
}
close(cli_sock);
} close(srv_sock);
return ;
} void err_handler(char *msg) {
fputs(msg, stderr);
fputc('\n', stderr);
exit();
}
client
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h> #define BUF_SIZE 1024 void err_handler(char *msg); int main(int argc, char **argv) {
int sock;
char msg[BUF_SIZE];
int str_len;
struct sockaddr_in srv_addr; if (argc != ) {
printf("Usage : %s <port>", argv[]);
exit();
} sock = socket(PF_INET, SOCK_STREAM, );
if (sock == -) {
err_handler("socket() error");
} memset(&srv_addr, , sizeof(srv_addr));
srv_addr.sin_family = AF_INET;
srv_addr.sin_addr.s_addr = inet_addr(argv[]);
srv_addr.sin_port = htons(atoi(argv[])); if (connect(sock, (struct sockaddr *) &srv_addr, sizeof(srv_addr)) == -) {
err_handler("connect() error");
} else {
printf("connected .........");
} while () {
fputs("Input msg(Q to quit):", stdout);
fgets(msg, BUF_SIZE, stdin);
if (!strcmp(msg, "q\n") || !strcmp(msg, "Q\n")) {
break;
}
write(sock, msg, strlen(msg));
str_len = read(sock, msg, BUF_SIZE - );
msg[str_len] = ;
printf("Msg form srv : %s", msg);
} close(sock);
return ;
} void err_handler(char *msg) {
fputs(msg, stderr);
fputc('\n', stderr);
exit();
}
Makefile
all a_b:
gcc -o srv main.c -g -Wall
gcc -o cli client.c -g -Wall
linux_c_tcp_example的更多相关文章
随机推荐
- 第一单元总结:基于基础语言、继承和接口的简单OOP
前情提要 到目前为止,OO课程已经完成了前三次的作业,分别为: 第一次作业:简单多项式的构造和求导.[正则表达式][数据结构][排序] 第二次作业:含三角函数因子的复杂多项式的构造.求导和化简.[递归 ...
- LoNg wAy tO Go
觉得一个电子工程师/硬件工程师应该有下面的能力: 1.模拟/数字电路的分析和设计.教科书上讲的都应该会,包括分离元件和运放的信号放大,滤波,波形产生,稳压电源,逻辑化简,基本触发器,基本计数器.寄存器 ...
- Java集合基于JDK1.8的ArrayList源码分析
本篇分析ArrayList的源码,在分析之前先跟大家谈一谈数组.数组可能是我们最早接触到的数据结构之一,它是在内存中划分出一块连续的地址空间用来进行元素的存储,由于它直接操作内存,所以数组的性能要比集 ...
- PHP mb_substr mbstring 函数
定义和用法 mb_substr - 获取部分字符串 版本支持 PHP4 PHP5 PHP7 支持 支持 支持 5.4.8 length 传入 NULL,则从 start 提取到字符串的结尾处. 在之前 ...
- 认识json,详解JsonConfig
说到json 初学者很迷茫,不知json怎么为何物,以及怎么用.我简单说下我的了解 既然用了json 我们就要知其然也知其所以然.下面有几个疑问 1.为什么要用json?也就是json 的优势 2.我 ...
- 微信小程序学习开发笔记
首先注册小程序开账号,下载开发工具之后,先啃官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/ ,把小程序的基本的代码框架 ...
- 洛谷 P3205 [HNOI2010]合唱队(区间dp)
传送门 解题思路 观察队形的组成方式可以得出,最后一名加入区间i...j的人要么是在i位置上,要么是在j位置上,所以我们可以用dp[i][j][0]表示区间i...j最后一个加入的人站在i位置上的方案 ...
- Linux在实际中的应用
各位童鞋们,你们是如何度过这周周末的呢?这周末的我在家学习学习再学习,然而学习到一半,公司领导突然给我打了个电话过来说有同事等会儿会去客户那部署无人值守安装系统服务,问我去不去学习下.我想我正在学Li ...
- POJ 3061:Subsequence 查找连续的几个数,使得这几个数的和大于给定的S
Subsequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10172 Accepted: 4160 Desc ...
- Kafka--Kafka简述
Kafka的诞生 Kafka最初是LinkedIn的一个内部基础设施系统.我们发现,虽然有很多数据库和系统可以用来存储数据,但在我们的架构里,刚好缺一个可以帮助处理持续数据流的组件. 我们希望能够把数 ...