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的更多相关文章
随机推荐
- 第3节 sqoop:6、sqoop的数据增量导入和数据导出
增量导入 在实际工作当中,数据的导入,很多时候都是只需要导入增量数据即可,并不需要将表中的数据全部导入到hive或者hdfs当中去,肯定会出现重复的数据的状况,所以我们一般都是选用一些字段进行增量的导 ...
- XtraReport1添加参数
解决了在report有个BeforePrint事件这里面直接 C# code ? 1 string year = this.Parameters["year"].Value.T ...
- open-source--攻防世界
题目直接给了源码,发现只要跳过条件就可以得到flag
- 项目上线后,遇到IE浏览器不显示大部分组件的问题
document.addEventListener('touchmove',(evt)=>{ }) 以上是ES6 语法,箭头函数,当然在IE下是不行的啦. 所以改为:ES5语法 document ...
- C++ 语言程序设计(清华大学)1
1.回文数字判断方法(逆过来数值相等):y=y*10+x%10; x /= 10; return(x==y) 2.int rand(void)函数,所需头文件<cstdlib> ,功能是求 ...
- jmeter常见错误及解决方法
jmeter常见错误: 错误一: Response code: Non HTTP response code: java.net.SocketTimeoutException Response m ...
- springboot指定配置文件运行
1.springboot指定配置文件运行 创建三个配置文件如下: application.properties内容如下: spring.profiles.active=rabbit如上配置,在运行时就 ...
- maven的本地仓库
今天新建的一个maven项目的依赖出了问题,想删除本地仓库的相关依赖文件夹,再重新加载,结果半天没找到文件夹位置. 我因为是改了maven的setting文件的,所以是直接到设置的文件夹里面找,结果半 ...
- SQLmap自动注入工具命令(10.28 10.29 第二十八 二十九天)
SQL注入工具:明小子 啊D 萝卜头 sqlmap 等等 SQLMAP:开源的自动化诸如利用工具,支持的数据库有12中,在/plugins中可以看到支持的数据库种类,在所有注入利用工具中他 ...
- hibernate保存失败
报错:org.hibernate.jdbc.BdatchedTooManyRowsAffectedException: Batch update returned unexpected row cou ...