博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux网络编程示例2
阅读量:2193 次
发布时间:2019-05-02

本文共 2649 字,大约阅读时间需要 8 分钟。

服务端程序

#include <stdio.h>

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <string.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <netinet/in.h>
 #include <pthread.h>
void *read_func(void *arg)
{
    int fd = *(int *)arg;
    int ret = -1;
    char buf[10] = {'\0'};
    //读取客户端的信息
    ret = read(fd, buf, 6);
    if(ret < 0){
        perror("read");
        pthread_exit(NULL);
    }
    while(1){
        sleep(1);
        if(strncmp(buf, "hello", 5) == 0){
            write(fd, "world", 6);
        }
        else{
            printf("Is not [hello]\n");
            write(fd, "nothe", 6);
        }
    }
}
int main(void)
{
    int fd = -1;
    int new_fd = -1;
    int ret = 0;
    char buf[6];
    pthread_t th_id;
    struct sockaddr_in server_add;
    //建立Socket连接
    fd = socket(AF_INET, SOCK_STREAM, 0);
    if(fd <  0){
        perror("socket");
        exit(1);
    }
    memset(&server_add, 0, sizeof(server_add));
    //设置sockaddr_in结构体中的相关参数
    server_add.sin_family = AF_INET;
    server_add.sin_port = htons(8888);
    server_add.sin_addr.s_addr = inet_addr("192.168.7.200");
    //绑定
    ret = bind(fd, (struct sockaddr *)&server_add, sizeof(struct sockaddr));
    if(ret < 0){
        perror("bind  ");
        exit(1);
    }
    //调用listen函数,创建示处理请求的队列
    listen(fd, 5);
    while(1){
        //调用accept函数,等待客户端的连接
        new_fd = accept(fd, NULL, NULL);
        if(new_fd < 0){
            perror("accept  ");
            exit(1);
        }
        //创建一个线程,用于读取客户端信息
        pthread_create(&th_id, NULL, read_func, &new_fd);
    }
    return 0;
}

客户端程序

#include <stdio.h>

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <string.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <netinet/in.h>
void *recv_func(void *arg)
{
    char buf[10] = {'\0'};
    int fd = *(int *)arg;
    int ret = -1;
    while(1){
        ret = read(fd, buf, 6);
        if(0 == ret){
            printf("server is exit!\n");
            exit(1);
        }
        if(ret < 0){
            perror("read");
            pthread_exit(NULL);
        }
        printf("read:%s\n", buf);    
    }
}
int main(void)
{
    int fd = -1;
    int new_fd = -1;
    int ret = 0;
    char buf[6];
    pthread_t th_id;
    struct sockaddr_in server_add;
    //建立Socket连接
    fd = socket(AF_INET, SOCK_STREAM, 0);
    if(fd <  0){
        perror("socket");
        exit(1);
    }
    //设置sockaddr_in结构体中的相关参数
    server_add.sin_family = AF_INET;
    server_add.sin_port = htons(8888);
    server_add.sin_addr.s_addr = inet_addr("192.168.7.200");
#if 0    
    ret = bind(fd, (struct sockaddr *)&server_add, sizeof(struct sockaddr));
    if(ret < 0){
        perror("bind  ");
        exit(1);
    }
#endif
    ret = connect(fd, (struct sockaddr *)&server_add, sizeof(struct sockaddr));
    if(ret < 0){
        perror("connect ");
        exit(1);
    }
    //创建一个线程,用于接收服务端信息
    pthread_create(&th_id, NULL, recv_func, &fd);
    while(1){
        memset(buf, 0, 6);
        fgets(buf, 6, stdin);
        write(fd, buf, 6);
        printf("read:%s\n", buf);
    }
    close(fd);
    return 0;
}

编译:

gcc -o client_process client_process.c -lpthread

gcc -o server_process server_process.c -lpthread

先运行服务端

./server_process

再运行客户端

./client_process

转载地址:http://sfiub.baihongyu.com/

你可能感兴趣的文章
探索Redis设计与实现6:Redis内部数据结构详解——skiplist
查看>>
探索Redis设计与实现5:Redis内部数据结构详解——quicklist
查看>>
探索Redis设计与实现8:连接底层与表面的数据结构robj
查看>>
探索Redis设计与实现7:Redis内部数据结构详解——intset
查看>>
探索Redis设计与实现9:数据库redisDb与键过期删除策略
查看>>
探索Redis设计与实现10:Redis的事件驱动模型与命令执行过程
查看>>
分布式系统理论基础1: 一致性、2PC和3PC
查看>>
分布式系统理论基础2 :CAP
查看>>
分布式系统理论基础3: 时间、时钟和事件顺序
查看>>
分布式系统理论基础4:Paxos
查看>>
分布式系统理论基础5:选举、多数派和租约
查看>>
分布式系统理论基础6:Raft、Zab
查看>>
分布式系统理论进阶7:Paxos变种和优化
查看>>
分布式系统理论基础8:zookeeper分布式协调服务
查看>>
搞懂分布式技术1:分布式系统的一些基本概念
查看>>
搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法
查看>>
搞懂分布式技术3:初探分布式协调服务zookeeper
查看>>
搞懂分布式技术4:ZAB协议概述与选主流程详解
查看>>
搞懂分布式技术5:Zookeeper的配置与集群管理实战
查看>>
搞懂分布式技术6:Zookeeper典型应用场景及实践
查看>>