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的更多相关文章
随机推荐
- spring切面编程
xml配置实现 先写三个类 public String amethod(String s) { System.out.println("This is AAAAAAAAAAAAAAAA&q ...
- CodeForces - 862C Mahmoud and Ehab and the xor(构造)
题意:要求构造一个n个数的序列,要求n个数互不相同,且异或结果为x. 分析: 1.因为0 ^ 1 ^ 2 ^ 3 ^ ... ^ (n - 3) ^ (n - 2) ^ (0 ^ 1 ^ 2 ^ 3 ...
- SDOI 种田记
day3: 今天早上来重新看了一下,IQ--,智障的感觉2333.弱势围观了一发众神奔,发现好多人都A了第三题,然而回想起自己考试的时候傻傻的码第二题的错误代码,真的是感觉mdzz. 不想吐槽了,记得 ...
- R语言 scale()函数
1.scale() 函数 #Usage scale(x, center = TRUE, scale = TRUE) #center中心化,scale标准化 #Arguments x :a numeri ...
- mysql 数据库函数入门
- 六、Vue-Router:基础路由处理、路由提取成单独文件、路由嵌套、路由传参数、路由高亮、html5的history使用
一.vue-router的安装 官网文档 [官网]:https://cn.vuejs.org/v2/guide/routing.html [router文档]:https://router.vuejs ...
- 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包
将项目复制到其地方的时候编译会报错,按照官网方法也不行,从网上查了一个有用的方法如下 打开CSPROJ文件.删除如下代码, <Import Project="..\packages\ ...
- 记一次Win上MySQL乱码问题
Win上MySQL乱码问题 笔记本上的数据库总会时不时的乱码(或者是一直乱码我没注意到?),在谷歌上试了几次错才正确解决,在此记录一下. 在MySQL数据库存储目录找到my.ini,在相应的标签下分别 ...
- 我编写的EEPROM 上位机软件
进入模式: 上位机发送 消息 上位机EEPROM 按下进入模式 消息的ID号是:0x08111111 数据是: 00 01 ff 00 00 00 00 00 上位机显示 运行状态 :为进入模式 当我 ...
- uniapp 小程序实现自定义底部导航栏(tarbar)
在小程序开发中,默认底部导航栏很难满足实际需求,好在官方给出了自定义形式,效果如下: 话不多说,直接上代码 1.组件 custom-tarbar.vue文件 <template> < ...