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的更多相关文章

随机推荐

  1. Elasticsearch学习入门

    一.关于Elasticsearch 1.特点 Elasticsearch基于全文搜索引擎 Apache Lucene ,由Java开发而来,面向API进行搜索, Restful 风格,分布式文件存储. ...

  2. 【Winform】ProgressBar

    var progressBar1 = new System.Windows.Forms.ProgressBar(); ; progressBar1.Maximum = ; progressBar1.V ...

  3. Luogu神贴合辑

    1.扩散性百万甜面包 - 陈乙己 2.Unknown_Error - 说句闲话:研究珂学的最好方法是

  4. 计算机是如何计算的、运行时栈帧分析(神奇i++续)

    关于i++的疑问 通过JVM javap -c 查看字节码执行步骤了解了i++之后,衍生了一个问题: int num1=50; num1++*2执行的是imul(将栈顶两int类型数相乘,结果入栈), ...

  5. 016.CI4框架CodeIgniter数据库操作之:Insert插入一条数据

    01.在Model中,写入插入的语句 <?php namespace App\Models\System; use CodeIgniter\Model; class User_model ext ...

  6. ListView的DrawSubItem时间添加边框,字体变粗问题

    procedure TFrmrdp.ListView1AdvancedCustomDrawSubItem(Sender: TCustomListView; Item: TListItem; SubIt ...

  7. python django Form表单

    Django 拥有自己独立的表单功能块,可以完成: 1.表单的定义 2.表单的校验 3.表单的前端样式 等功能,方便我们开发,那么接下来,我们看一下表单的定义 首先我们确定我们要编写的功能,一个提供给 ...

  8. C语言备忘录——运算符优先级

    丢脸啊,今天写一道算法题,第一次没写对.改了半天愣是没看出来错哪,后面说出了一下过程,突然发现是运算符优先级惹得祸 if (!num % 2){ …… },!的运算优先级高于%,啊啊啊,丧心病狂我找了 ...

  9. 51nod 1423:最大二“货”

    1423 最大二"货" 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  取消关注 白克喜欢找一个序列 ...

  10. sqlite if not exists应用实例

    INSERT or replace INTO [main].[RecordInfo]([WorkID],[bArtificialAttendance],[fThreshold],[Attendance ...