/* sockclnt.c*/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h> /*for struct sockaddr_in*/
#include <signal.h>

#define SVR_IP      "12.12.12.221"
#define SVR_PORT    1234
#define BUFSIZE        255

int sockfd  = 0;
void mysigint(int sig)
{
    printf("close fd = %d\n",sockfd);
    close(sockfd);

}

int main()
{
    signal(5,mysigint);
    int ret     = 0;
    struct sockaddr_in svr_addr;
    memset(&svr_addr, 0, sizeof(struct sockaddr_in));

char * msg = "'path:/home/dongshen/media_file/b_1.ts'";

// create client socket fd
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd == -1) {
        perror("socket failed");
        exit(1);
    }

// connet to server
    svr_addr.sin_family         = AF_INET;                 
    svr_addr.sin_port           = htons(SVR_PORT);          
    svr_addr.sin_addr.s_addr    = inet_addr(SVR_IP);
 
printf("before connect\n");
    ret = connect(sockfd, (struct sockaddr *)&svr_addr, sizeof(struct sockaddr_in));
    if (ret == -1) {
        perror("connect failediiiii");
        exit(1);
    }
printf("after connect\n");
    int i = 0;
    for (i = 0; i < 500; i++)
    {
        char * msg = "hello server....";
        printf("client send msg: %s\n", msg);
        if((send(sockfd, msg,    strlen(msg), 0))<0)
        {
            perror("send()");
        }

char recv_buf[BUFSIZE] = {0};
        int recv_len = recv(sockfd, recv_buf, sizeof(recv_buf), 0);
        printf("client recv msg: %s%d\n", recv_buf, recv_len);

sleep(100);
    }   
    close(sockfd);

}

服务端

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h> /* for struct sockaddr_in*/
#include <sys/errno.h>
#include <signal.h>

#define SVR_IP   "12.12.12.221"
#define SVR_PORT  1234
#define BACKLOG   10

#define MAX_BUF_LEN 1024

int connfd      = 0;
void mysigint(int sig)
{
        printf("sigint   i will close connfd = %d\n",connfd);
        close(connfd);
}

void chld_handle(int sig)
{
    pid_t   pid;
    int     stat;

while ((pid = waitpid(-1, &stat, WNOHANG)) > 0)
    {
        printf("child %d terminated\n", pid);
    }
    return;    
}

int main()
{
    
        struct sigaction act;
    act.sa_handler = chld_handle;
    sigemptyset(&act.sa_mask);
    act.sa_flags = SA_RESTART;

sigaction(SIGCHLD, &act, 0);
    int listenfd    = 0;
    int ret         = 0;
    struct sockaddr_in svr_addr, cli_addr;
    memset(&svr_addr, 0, sizeof(struct sockaddr_in));
    memset(&cli_addr, 0, sizeof(struct sockaddr_in));
 
    // create listen socket fd
    listenfd = socket(AF_INET, SOCK_STREAM, 0);        
        if (listenfd == -1) {
                perror("socket failed");
        exit(1);
        }

// bind svr ip and port
        svr_addr.sin_family = AF_INET;                
        svr_addr.sin_port = htons(SVR_PORT);            
        svr_addr.sin_addr.s_addr = inet_addr(SVR_IP);
        ret = bind(listenfd, (struct sockaddr*)&svr_addr, sizeof(struct sockaddr));
        if (ret == -1) {
                perror("binad failed");
                exit(1);
        }

// listen client
        ret = listen(listenfd, BACKLOG);
        if (ret == -1) {
                perror("listen failed");
                exit(1);
        }

printf("server is on...\n");

while(1)
    {
        int sin_size = sizeof(struct sockaddr_in);
        if((connfd = accept(listenfd, (struct sockaddr *)&cli_addr, &sin_size)) < 0)
        {
            perror("accept failed");
            if (errno == EINTR)
            {
                perror("child process cause it\n");
                continue;
            }
            else
            {
                break;
            }
        }

pid_t child_pid = fork();
        if (0 == child_pid) // this is child process
        {
            close(listenfd);
            printf("one socket(%d) client come\n", connfd);
           
    signal(SIGINT,mysigint);

char recv_buf[MAX_BUF_LEN] = {0};
            int recv_len = 0;
            while((recv_len = recv(connfd, recv_buf, sizeof(recv_buf), 0)) > 0)
            {
                printf("svr %d recv %s recv_len %d\n", connfd, recv_buf, recv_len);
                ret = send(connfd, recv_buf, strlen(recv_buf), 0);
                if (ret < 0)
                {
                    perror("send failed");
                    exit(1);
                }
                memset(recv_buf, 0, sizeof(recv_buf));
            }

if (recv_len < 0)
            {
                perror("recv failed");
                exit(1);
            }
            printf("one socket(%d) client go\n", connfd);
            close(connfd);
            exit(0);
        }

close(connfd);
    }
    close(listenfd);
        return 0;
}

C语言客户端服务器代码的更多相关文章

  1. TCP通信的客户端代码实现和TCP通信的服务器代码实现

    TCP通信的客户端代码实现 package com.yang.Test.ServerStudy; import java.io.*; import java.net.Socket; /** * TCP ...

  2. 【伯乐在线】最值得阅读学习的 10 个 C 语言开源项目代码

    原文出处: 平凡之路的博客   欢迎分享原创到伯乐头条 伯乐在线注:『阅读优秀代码是提高开发人员修为的一种捷径』http://t.cn/S4RGEz .之前@伯乐头条 曾发过一条微博:『C 语言进阶有 ...

  3. Rserve详解,R语言客户端RSclient【转】

    R语言服务器程序 Rserve详解 http://blog.fens.me/r-rserve-server/ Rserve的R语言客户端RSclient https://blog.csdn.net/u ...

  4. 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)

    搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...

  5. C# WebSocket 服务端示例代码 + HTML5客户端示例代码

    WebSocket服务端 C#示例代码 using System; using System.Collections.Generic; using System.Linq; using System. ...

  6. linux创建SVN客户端,服务器

    1- linux基本都自带svn 2-创建svn服务器 新创建服务器代码仓库 # svnadmin create serversvn 这样,我们就在~/目录下新建了版本库serverSvn. 3-修改 ...

  7. Linux 下 简单客户端服务器通讯模型(TCP)

    原文:Linux 下 简单客户端服务器通讯模型(TCP) 服务器端:server.c #include<stdio.h> #include<stdlib.h> #include ...

  8. phpstorm-----实现实时编辑服务器代码

    phpstorm是一款功能强大.广大码农钟爱的编辑器,也是我最常用的编辑器.这里介绍一个偷懒的功能. 用sftp协议与远程服务器相连接,实现直接编辑服务器代码的功能.而效果就是ctrl+s不仅可以保存 ...

  9. Redis学习之路(008)- Redis C语言客户端库hiredis文档翻译

    Hiredis是Redis数据库一个轻量的C语言客户端库. 之所以轻量是由于它只是简单的提供了对redis操作语句支持的接口,并没有实现具体的操作语句的功能.但正是由于这种设计使我们只要熟悉了通用的r ...

随机推荐

  1. Spring入门学习(二)三种实例化bean的方法

    前面的哪一种就是通过构造函数来实例化对象 下面我们可能用到工厂方法来视力话对象,这样我们的配置文件又该怎么配置呢 <bean name="service2" class=&q ...

  2. 判断一个数是否为2的n次幂

    参考:http://bbs.csdn.net/topics/370058619 如题,如何判断一个整数是否是2的N次方,我能想到的方法有两个 1.一直除2,看最后是否等于1.(最笨的方法) 2.转换成 ...

  3. ubuntu 14.04 GDAL

    autotools-dev comerr-dev hdf5-helpers icu-devtools krb5-multidev libarmadillo4 libarpack2 libblas3 l ...

  4. POCO系列之——什么是POCO

    做过JAVA的朋友应该对这个比较熟悉了在JAVA中叫POJO,POCO是Plain Old CLR Object的缩写.所谓的POCO就是那些不包括INSERT.ADD.DEL等数据持久化操作的以及不 ...

  5. webapi中的自定义路由约束

    Custom Route Constraints You can create custom route constraints by implementing the IHttpRouteConst ...

  6. Openjudge-计算概论(A)-求一元二次方程的根

    描述: 利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax2 + bx + c =0的根 ...

  7. HeapSpray初窥(2014.12)

    注:环境是xp+ie8 1.HeapSpray简介 Windows的堆因为动态分配和释放的特点,其看起来是不连续(没有规律的),但是仍可以找到一定的规律:大量的连续分配会更倾向使用连续的地址,减少了碎 ...

  8. sql注入绕过union select过滤

    # # # #WAF Bypassing Strings: /*!%55NiOn*/ /*!%53eLEct*/ ,,)-- - +union+distinct+select+ +union+dist ...

  9. redis2--redis安装

    (1)安装Redis Redis目前只支持Linux系统,因为开发此软件的创始者认为,Redis是为后台数据服务的,所以认为该软件使用在纯净的服务环境下,而不是应用型操作系统下,而Linux作为服务器 ...

  10. Student s = new Student();在内存中做了哪些事情?

    [Student s = new Student();在内存中做了哪些事情?] 1加载Student.class文件进内存 2在栈内存为s开辟空间 3在堆内存为学生对象开辟空间 4对学生对象的成员变量 ...