/* 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. Binary Trees

    1. Definiation What is Binary Trees? Collection of node (n>=0) and in which no node can have more ...

  2. jquery.cookie.js 的配置

    一个轻量级的cookie 插件,可以读取.写入.删除 cookie. jquery.cookie.js 的配置 首先包含jQuery的库文件,在后面包含 jquery.cookie.js 的库文件. ...

  3. Java中需要总结的几个问题

    慢慢总结,不然每次百度挺心烦的. 1. java文件的读写 2. String和StringBuffer的区别

  4. 星语硬件检测专家 V4.3 官方版

    软件名称: 星语硬件检测专家 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win 32位/64位 软件大小: 15.8MB 图片预览: 软件简介: 星语硬件检测专家是一款功能非常强大的硬件 ...

  5. jmeter3 测试soap协议-webservice接口

    1.新建一个线程组 2.在线程组下新增,SOAP请求 3.设置soap请求,然后就可以测试了

  6. 超赞的OOM检测(除了mat以外)

    今天看了下微博,扔物线分享了个内存检测的工具: 内存泄露是 OOM 最常见的原因,但它的侦测需人工排查,往往眼看瞎也未必能找到泄露的内存.Square 新库 LeakCanary 用一种巧妙的思路实现 ...

  7. Jena文档《An Introduction to RDF and the Jena RDF API》的译文

    前言本文是一篇对W3C的资源描述框架(RDF)和 Jena(一个Java的RDF API)的教程性介绍. 本文是为那些不熟悉RDF的, 以及那些通过建立原形可以达到最好学习效果的, 或是因为其他原因希 ...

  8. repeat a string in java

    if I want to repeat "hello" four times as a new string-> "hellohellohellohello&quo ...

  9. git 使用整理

    git使用 Ubuntu 14.04 安装 apt-get install git 版本查看 git --version git version 配置(全局变量,默认值.可在具体仓库中设置改仓库使用的 ...

  10. 解析JSON对象与字符串之间的相互转换

    在开发的过程中,如果对于少量参数的前后台传递,可以直接采用ajax的data函数,按json格式传递,后台Request即可,但有的时候,需要传递多个参数,这样后台 接受的时候Request多个很麻烦 ...