精华内容
下载资源
问答
  • C语言并发服务器

    2014-02-17 22:29:06
    C语言并发服务器,包括客户端和服务器端。
  • c语言服务器

    2014-07-18 17:34:44
    c语言服务器
  • c语言tcp服务器端程序代码,c语言tcp服务器端程序代码
  • C语言服务器

    2017-10-24 20:00:07
    c语言Tcp服务器可接受来自多个客户端发送的文字,聊天
  • 如何用C语言写一个web服务器的基础功能

    多人点赞 热门讨论 2021-05-27 18:26:23
    我们都知道,学一门语言,只是单独看了就不的话是很容易出现眼高手低的,所以,今天摩杜云要给大家分享的内容,就是如何用C语言写一个web服务器的基础功能,希望大家看完有所收获。 服务器架构 目标架构 以nginx的...

    我们都知道,学一门语言,只是单独看了就不写的话是很容易出现眼高手低的,所以,今天摩杜云要给大家分享的内容,就是如何用C语言写一个web服务器的基础功能,希望大家看完有所收获。

    服务器架构

    目标架构

    以nginx的思想来考虑本服务器架构,初步考虑如下图:
    在这里插入图片描述

    当然php进程也可以替换为其他的脚本语言,可以更改源码中的command变量实现。

    服务器有一个master进程,其有多个子进程为worker进程,master进程受理客户端的请求,然后分发给worker进程,worker进程处理http头信息后将参数传递给php进程处理后,将结果返回到上层,再响应给客户端。

    也考虑过使用php-fpm的worker进程池方式,那样的话php-fpm进程也要仿写了,目前还不熟悉其内部构造,如果可以简单化,自然向其靠拢。目前对PHP的SAPI接口不熟,了解一下再考虑。

    当前状态

    当前状态的服务器还极其简单,总结下来有以下地方待优化:

    当前还是单进程,需要改成多进程,最终为worker进程池方式;
    优化socket IO模型,考虑epoll、事件驱动方式;
    只支持HTTP GET请求方法,未进行太多的异常处理来定义http状态码;
    与php进程的交互方式,考虑如nginx使用unix domain socket方式。
    协议目前只考虑了http,后续会考虑一些基于TCP的协议;
    虽然简单,但服务器已经有基本的功能了:

    它监听本地地址的8080端口,将接收到的http头中的path信息提出出来交给php进程,php进程将参数信息处理后返回给服务器,服务器拼装http响应信息再将结果返回给客户端。

    下面介绍各个功能的实现:

    功能实现

    socket系列方法

    在介绍函数之间先用一张图来介绍一次http请求中客户端与服务器之间的交互:
    在这里插入图片描述

    如图:服务器创建要进行:

    1.调用socket()创建一个连接;int socket(int domain, int type, int protocol);

    2.调用bind()给套接字命名,绑定端口;int bind( int socket, const struct sockaddr *address, size_t address_len);

    3.调用listen()监听此套接字;int listen(int socket, int backlog);

    4.调用accept()接受客户端的连接;int accept(int socket, struct sockaddr *address, size_t *address_len);

    5.调用recv()接收客户端的信息;int recv(int s, void *buf, int len, unsigned int flags);

    6.调用send()将响应信息发送给客户端;int send(int s, const void * msg, int len, unsigned int falgs);

    socket间的接收和发送信息在 C 中有几个系列:write() / read() 、send() / recv() 、sendto() / recvfrom()、 sendmsg() / recvmsg(),可以自行选用。

    另外函数参数释义和要点,都被我注释在代码中了,感兴趣的可以拉下来看一下,这些在网上也多有介绍,这里不再赘述。

    服务器与PHP cli交互

    然后是C进程和php进程的交互,考虑到简单易用,目前在C进程中直接执行php脚本:

    一开始使用system()函数: int system(const char *command);

    system函数会fork一个子进程,在子进程中以cli方式执行php脚本,并将错误码或返回值返回。由于其结果类型不可控,编译时会报一个warning。而且它将结果返回给父进程时,还会在标准输出中打印结果,在服务器执行时会抛出异常。

    于是找到了另一个方法popen, FILE * popen(const char * command, const char * type);:

    popen同样会fork一个子进程来执行command ,然后建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。随后进程便可利用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中。

    其type参数便是控制连接到子进程的标准输入还是标准输出。我们想要子进程的标准输出,于是传入type参数为字符 “r” (read)。同理,如果想写入子进程标准输入的话,可以传值 “w”(write)。

    另外在接收缓冲区内容的时候也出现了一点小意外:由于使用的fgets()方法会以换行符 为一段的结尾,在接收php进程输出时遇到换行会结束,这里使用了一个中间字符串数组line来接收每一行的信息,将每一行的信息拼装到结果中。

    代码如下:
    在这里插入图片描述

    报文数据处理

    socket处于应用层和传输层之间的虚拟层,由于设置服务器socket协议类型为TCP,那么TCP的握手挥手、数据读取等步骤对于我们都是透明的。我们拿到的数据即HTTP报文,关于HTTP报文结构和其字段解释的文章非常多,这里也不再多提。

    首先使用C的strtok()方法,获取到HTTP头的第一行,获取到其http方法和path信息,将这些信息处理后,再使用sprintf()方法拼合HTTP响应报文,主要替换了响应内容长度和响应内容。

    以上就是关于“如何用用C写一个web服务器的基础功能”的详细内容介绍,希望大家看望之后有所帮助,如若有不清楚的地方或者想了解更多知道可以关注摩杜云,领先的云计算及人工智能服务提供商,十几年行业经验,专业可靠!另外,如果大家觉得这篇文章不错的话,可以分享给更多的人看到。

    展开全文
  • C语言写一个最小的Web服务器

    热门讨论 2013-09-02 14:10:30
    只有60行代码。 演示如何使用C语言写一个能响应浏览器请求的http服务器
  • 本人在做本科毕设,自己用C语言写了一个服务器,操作系统是WinCE。本人想结合ISAPI技术实现浏览器与自己编写的服务器的动态交互,不知是否可行,望各位大神指点~
  • c语言写的 ftp server 服务器,功能很简单,主要实现了以下ftp命令 : PASV LIST CWD PWD MKD RMD RETR STOR DELE SIZE ABOR QUIT TYPE NOOP。 每一个连接都开一个线程去处理,默认绑定端口为8021,目前支持匿名...

    用c语言写的 ftp server 服务器,功能很简单,主要实现了以下ftp命令 : PASV LIST CWD PWD MKD RMD RETR STOR DELE SIZE ABOR QUIT TYPE NOOP。

    每一个连接都开一个线程去处理,默认绑定端口为8021,目前支持匿名登录,程序只能运行于 linux 系统,我是在 ubuntu 14.04环境下编写的。
    源码地址:https://github.com/hookr/Ftp-Server-C-Version


    ftp server c version

    This is a ftp server program written in c .I modified from this version,using threads instead of processes.original address.
    You can run it only on linux.

    Compilation and Run

    1. cd to the ftp server dir
    2. make
    3. execute with ./ftp_server

    Function introduction

    1. Please run as root.
    2. Default binding port is 8021. You can change it to any port such as 21.
    3. Only supports anonymous users.
    4. Program directory for the FTP root directory
    5. Supported ftp commands include:PASV LIST CWD PWD MKD RMD RETR STOR DELE SIZE ABOR QUIT TYPE NOOP
    展开全文
  • C语言实现的服务器端socket编程,使用select对多个客户端进行处理。
  • Linux下用C语言写的telnet服务器程序

    热门讨论 2009-06-16 21:12:23
    这是Linux下用C语言编写的telnet服务器程序,没有用户名和密码,直接以开启服务者的身份登录系统
  • c语言写的多协议多服务并发的服务器,主要用到多线程socket编程
  • 一个简单的C语言聊天服务器 运行于Linux操作系统,数据库为mysql 用到技术:C语言,epoll, mysql, glib
  • 服各器端计算器,通过客戸端输入表达式,在服各器端完成计算,并将汁算结果返回给客戸端.客戸端输入表达式形式カ: 23+42x2-56/7=,即包合+、-、*、/四则运算符,以=号結束,...了一通全是报错,初学c语言求大佬帮忙。
  • C语言读写mysql

    千次阅读 2017-09-16 08:45:17
    创建数据库CREATE DATABASE tiger;CREATE TABLE `test` ( `id` int(11) NOT NULL auto_increment, PRIMARY KEY (`id`) );ALTER TABLE `test` ADD COLUMN `name` varchar...C语言读写数据库/* =====================

    创建数据库

    CREATE DATABASE tiger;
    
    CREATE TABLE `test` (
        `id` int(11) NOT NULL auto_increment,
    
        PRIMARY KEY (`id`)
    );
    
    ALTER TABLE `test`
        ADD COLUMN `name` varchar(20);

    C语言读写数据库

    /*
     ============================================================================
     Name        : mysqltest.c
     Author      : 
     Version     :
     Copyright   : Your copyright notice
     Description : Hello World in C, Ansi-style
     ============================================================================
     */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #include <mysql.h>
    
    MYSQL *g_conn; // mysql 连接
    MYSQL_RES *g_res; // mysql 记录集
    MYSQL_ROW g_row; // 字符串数组,mysql 记录行
    
    #define MAX_BUF_SIZE 1024 // 缓冲区最大字节数
    
    const char *g_host_name = "127.0.0.1";
    const char *g_user_name = "root";
    const char *g_password = "123456";
    const char *g_db_name = "tiger";
    const unsigned int g_db_port = 3306;
    
    void print_mysql_error(const char *msg) { // 打印最后一次错误
        if (msg)
            printf("%s: %s\n", msg, mysql_error(g_conn));
        else
            puts(mysql_error(g_conn));
    }
    
    int executesql(const char * sql) {
        /*query the database according the sql*/
        if (mysql_real_query(g_conn, sql, strlen(sql))) // 如果失败
            return -1; // 表示失败
    
        return 0; // 成功执行
    }
    
    
    int init_mysql() { // 初始化连接
        // init the database connection
        g_conn = mysql_init(NULL);
    
        /* connect the database */
        if(!mysql_real_connect(g_conn, g_host_name, g_user_name, g_password, g_db_name, g_db_port, NULL, 0)) // 如果失败
            return -1;
    
        // 是否连接已经可用
        if (executesql("set names utf8")) // 如果失败
            return -1;
    
        return 0; // 返回成功
    }
    
    
    int main(void) {
        puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
    
        if (init_mysql());
            print_mysql_error(NULL);
    
        char sql[MAX_BUF_SIZE];
        sprintf(sql, "INSERT INTO `test`(`name`) VALUES('testname')");
    
        if (executesql(sql))
            print_mysql_error(NULL);
    
        if (executesql("SELECT * FROM `test`")) // 句末没有分号
            print_mysql_error(NULL);
    
        g_res = mysql_store_result(g_conn); // 从服务器传送结果集至本地,mysql_use_result直接使用服务器上的记录集
    
        int iNum_rows = mysql_num_rows(g_res); // 得到记录的行数
        int iNum_fields = mysql_num_fields(g_res); // 得到记录的列数
    
        printf("共%d个记录,每个记录%d字段\n", iNum_rows, iNum_fields);
    
        puts("id\tname\n");
    
        while ((g_row=mysql_fetch_row(g_res))) // 打印结果集
            printf("%s\t%s\n", g_row[0], g_row[1]); // 第一,第二字段
    
        mysql_free_result(g_res); // 释放结果集
    
        mysql_close(g_conn); // 关闭链接
    
        return EXIT_SUCCESS;
    }

    编译

    需要安装mysql,并在编译的时候指定mysqlclient头文件,库的目录

    gcc -l mysqlclient -I /usr/local/mysql/include/ -L /usr/local/mysql/lib/ mysqltest.c

    运行

    需要在/usr/lib/目录下创建 /usr/lib/libmysqlclient.so.18 -> /usr/local/mysql/lib/libmysqlclient.so.18 的软链接

    ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18

    这里写图片描述

    展开全文
  • C语言编写TCP服务器

    2017-03-23 20:16:47
    网络编程通过C语言实现TCP服务器编写
  • 基于C语言tftp服务器与客户端实现

    千次阅读 2016-08-29 13:24:41
    本实验主要实现tftp协议的服务器与客户端。

    作者:华清远见讲师

    开发环境:ubuntu

    所用知识点:c,socket, tcp/ip协议

    A)本实验主要实现tftp协议的服务器与客户端。

    服务器实现功能有:

    1)接收处理客户端请求,上传下下载文件

    2)进行用户验证

    3)对传输数据进行加密解密处理

    4)生成日志文件

    客户端实现功能有:

    1)向服务器发出请求,上传或下载文件

    2)对传输数据加密解密

    3)对用户信息进行MD5加密

    B)相关代码实现:

    宏定下:

    #ifndef MAKEWORD

    #define MAKEWORD(l,h) ((unsigned short)(((unsigned char)(l))|(((unsigned short)(unsigned char)(h))<<8)))

    #endif

    #define WSA_MAJOR_VERSION 1

    #define WSA_MINOR_VERSION 1

    #define WSA_VERSION MAKEWORD(WSA_MAJOR_VERSION, WSA_MINOR_VERSION)

    #define TFTP_OCTET 1

    #define TFTP_WSTAT_FIRSTACK 0

    #define TFTP_WSTAT_NEXTACK 1

    #define TFTP_WSTAT_LASTACK 2

    #define TFTP_RRQ 1 //读请求

    #define TFTP_WRQ 2 //写请求

    #define TFTP_DATA 3 //数据

    #define TFTP_ACK 4 //ACK

    #define TFTP_ERROR 5 //Error

    #define MAX_RETRY 3 //最大重复次数

    #define TFTP_NOTEND_DATALEN 512+2+2 //数据块长度

    //错误种类

    #define Not_defined 0

    #define File_not_found 1

    #define Access_violation 2

    #define Disk_full 3

    #define Illegal_TFTP_operation 4

    #define Unknown_port 5

    #define File_already_exists 6

    #define No_such_user 7

    #define Time_out 8

    #define Read_file_Error 9

    #define Cannot_create_file 10

    #define passwd_or_user_error 11

    包的填充:

    #include "define.h"

    #include

    #include

    int makeack(unsigned short num,char *buffer,int size );

    int makedata(unsigned short num,char *data,int datasize,char *buffer,int bufsize);

    int makeerr(unsigned short num,char *buffer);

    //ACK包填充

    int makeack(unsigned short num,char *buffer,int size )

    {

    int pos = 0;

    buffer[pos] = 0;

    pos++;

    buffer[pos] = TFTP_ACK; //操作码为04

    pos++;

    buffer[pos] = (char)(num>>8);//块号2个字节

    pos++;

    buffer[pos] = (char)num;

    pos++;

    return pos;

    }

    //Data包填充

    int makedata(unsigned short num,char *data,int datasize,char *buffer,int bufsize)

    {

    int pos = 0;

    buffer[pos] = 0;

    pos++;

    buffer[pos] = TFTP_DATA; //操作码为03

    pos++;

    buffer[pos] = (char)(num>>8);//块号

    pos++;

    buffer[pos] = (char)num;

    pos++;

    memcpy(&buffer[pos],data,datasize);//填充数据

    pos = pos + datasize;

    return pos;

    }

    //ERROR包填充

    int makeerr(unsigned short num,char *buffer)

    {

    int pos=0;

    buffer[pos]=0;

    pos++;

    buffer[pos]=TFTP_ERROR; //操作码为05

    pos++;

    buffer[pos] = (char)(num>>8); //错误种类号

    pos++;

    buffer[pos] = (char)num;

    pos++;

    return pos;

    }

    日志log.c实现

    #include

    static char log[100]; //日志

    char datetime[20]; //记录时间变量

    int timeout=2,retran=3; //服务器参数

    void record(int a,struct sockaddr_in *sin,char *file)

    {

    char tem[60];

    time_t t=time(0); //初始化日历时间

    strftime(datetime,sizeof(datetime),"%y/%m/%d %X",localtime(&t));//将时间格式化

    strcat(log,datetime);//将时间写入记录

    //将字符串格式化

    bzero(&tem,sizeof(tem));

    if(a==1)

    sprintf(tem," 收到来自 %s 上传文件 %s 的请求。\n",inet_ntoa(sin->sin_addr),file);

    if(a==2)

    sprintf(tem," %s 上传文件 %s 完毕。\n",inet_ntoa(sin->sin_addr),file);

    if(a==3)

    sprintf(tem," 收到来自 %s 下载文件 %s的请求。\n",inet_ntoa(sin->sin_addr),file);

    if(a==4)

    sprintf(tem," %s 下载文件 %s 完毕。\n",inet_ntoa(sin->sin_addr),file);

    if(a==5)

    sprintf(tem," 出现出错,操作中断。\n",inet_ntoa(sin->sin_addr),file);

    //将具体信息写入记录

    strcat(log,tem);

    FILE *write;

    if((write=fopen("log.txt","a+"))==NULL)

    printf("打开记录文件失败\n");

    //将记录写入文件

    fwrite(&log,strlen(log),1,write);

    fclose(write);

    bzero(&log,sizeof(log));

    }

    加密解密实现

    #include

    #include

    #include

    int decrypt(FILE *in,FILE *out);

    int encrypt(FILE *in,FILE *out);

    unsigned char atoh(char *hexstr);

    int encrypt(FILE *in,FILE *out)

    {

    if(in == NULL || out == NULL)

    {

    fprintf(stderr,"%s\n","file error!\n");

    return -1;

    }

    unsigned char hex;

    while(fread(&hex,1,1,in))

    {

    hex = ~hex^0x98;

    fprintf(out,"%02X",hex);

    }

    return 0;

    }

    int decrypt(FILE *in,FILE *out)

    {

    if(in == NULL || out == NULL)

    {

    fprintf(stderr,"%s\n","file error!");

    return -1;

    }

    unsigned char hexstr[3];

    unsigned char hex = 0;

    int i = 0;

    while(fread(hexstr,2,1,in))

    {

    hex = atoh(hexstr);

    hex = ~(hex ^ 0x98);

    fwrite(&hex,1,1,out);

    }

    return 0;

    }

    /* convert string to hex */

    unsigned char atoh(char *hexstr)

    {

    int i;

    int hextodec[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

    char chtodec[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

    unsigned char hexnum = 0;

    for(i = 0; i < sizeof(chtodec); ++i)

    {

    if(hexstr[0] == chtodec[i])

    {

    hexnum += hextodec[i]*16;

    }

    }

    for(i = 0; i < sizeof(chtodec); ++i)

    {

    if(hexstr[1] == chtodec[i])

    {

    hexnum += hextodec[i];

    }

    }

    return hexnum;

    }

    上传数据:

    //上传函数

    void upload(struct sockaddr_in sour_addr,char buffer[])

    {

    char send_buffer[1024] = {0};

    char recv_buffer[1024] = {0};

    struct sockaddr_in dest_addr;

    struct timeval timeout = {10,0};

    int sour_len = 0;

    int ret = 0;

    int len = 0;

    int flen = 0;

    fd_set fdr;

    unsigned short lastdata = 0;

    unsigned short blocknum = 0;

    FILE *file;

    FILE *decrypt_file = NULL;

    char filename[256];

    //获取文件名

    strcpy(filename,buffer+2);

    dest_addr.sin_family = AF_INET;

    dest_addr.sin_port = sour_addr.sin_port;

    dest_addr.sin_addr.s_addr = inet_addr(desthost);//

    //如果本地存在同名文件

    if((file=fopen(filename,"rb"))!=NULL)

    {

    //发送一个error包,报告存在同名文件

    printf("***存在同名文件***");

    len = makeerr(File_already_exists,send_buffer);

    ret = sendto(sock,send_buffer,len,0,(struct sockaddr *)&dest_addr,sizeof(dest_addr));

    record(5,&sour_addr,filename);

    return;

    }

    //建立文件

    if((file=fopen(filename,"w+b"))==NULL)

    {

    //如果失败,发送error包

    printf("创建文件失败\n");

    len = makeerr(Cannot_create_file,send_buffer);

    ret = sendto(sock,send_buffer,len,0,(struct sockaddr *)&dest_addr,sizeof(dest_addr));

    record(5,&sour_addr,filename);

    return;

    }

    //发送ACK

    len = makeack(blocknum,send_buffer,sizeof(send_buffer));

    ret = sendto(sock,send_buffer,len,0,(struct sockaddr *)&dest_addr,sizeof(dest_addr));

    blocknum++;

    while(1){

    FD_ZERO(&fdr);

    FD_SET(sock, &fdr);

    ret = select(sock+1, &fdr, NULL,NULL, &timeout);

    if(-1==ret)

    {

    printf("Socket 错误\n");

    fclose(file);

    record(5,&sour_addr,filename);

    return;

    }

    else

    {

    if(0==ret)

    {

    printf("超时\n");

    fclose(file);

    record(5,&sour_addr,filename);

    return;

    }

    else

    {

    if (FD_ISSET(sock,&fdr))

    {

    //接收数据包

    sour_len = sizeof(struct sockaddr);

    ret = recvfrom(sock,recv_buffer,sizeof(recv_buffer),0,(struct sockaddr *)&sour_addr,&sour_len);

    //如果是数据包

    if(TFTP_DATA==recv_buffer[1])

    {

    lastdata = MAKEWORD(recv_buffer[3],recv_buffer[2]); //块号

    //如果块号正确

    if(lastdata == blocknum)

    {

    //发送ACK包

    len = makeack(blocknum,send_buffer,sizeof(send_buffer));

    sendto(sock,send_buffer,len,0,(struct sockaddr *)&dest_addr,sizeof(dest_addr));

    blocknum++;

    if(blocknum > 65535)

    blocknum = 0;

    //最后一包

    if(ret < TFTP_NOTEND_DATALEN)

    {

    //写入文件

    fwrite(&recv_buffer[4],1,ret-4,file);

    flen = flen + ret -4;

    #ifdef _DEBUG_

    printf("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);

    printf("*****传输结束,共收到 %d 字节*****\n",flen);

    #endif

    rewind(file);

    if((decrypt_file =fopen("decrypt_temp","wb+"))==NULL){

    printf("decrypt file open error \n");

    return;

    }

    decrypt(file, decrypt_file);

    fclose(decrypt_file);

    rename("decrypt_temp", filename);

    fclose(file);

    record(2,&sour_addr,filename);

    return;

    }

    else

    {

    fwrite(&recv_buffer[4],1,512,file);

    flen = flen + 512;

    #ifdef _DEBUG_

    printf("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);

    printf("已收到 %d 字节\n",flen);

    #endif

    }

    }

    else

    {

    //重新发送ACK包

    printf("数据包块号错误.\n");

    sendto(sock,send_buffer,len,0,(struct sockaddr *)&dest_addr,sizeof(dest_addr));

    }

    }

    }

    }

    }

    }

    }

    C)客户端与服务都配有工程管理器,可通过make 完成编译。

    D)实现效果:



    文章源自华清远见嵌入式学院:http://www.embedu.org/

    >>>更多优秀技术博文每日更新


    展开全文
  • C语言实现服务器客户端通信(互发信息)客户端服务器net.hnet.cserver.c 客户端 利用select实现 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <errno.h> #include...
  • TCP c语言 服务器客户端简单代码 先开启服务器 在开启服务端 测试是否连接
  • c语言HTTP服务器,超级简易版。

    千次阅读 2017-03-04 16:19:47
    算是对linux多线程的复习把,尝试这用socket了一个简单的HTTP服务器,当访问它的时候它会给你发送一个HTML文件,这个HTML文件需要自己。 代码:#include #include #include #include #include #include ...
  • RTSP 服务器C语言

    2019-09-10 15:28:26
    RTSP是实时流媒体传输协议,服务器和客户端之间通过RTSP协议实现握手和认证过程,通过RTP协议传输视频数据包,本资源通过C语言实现了RTSP服务器的功能。
  • Linux 下c语言ftp服务器简单实现

    万次阅读 多人点赞 2014-04-07 02:13:53
    //利用read函数来接受服务器发来的数据 if(read(sockfd, buffer, N) ) { printf("Read Error!At commd_get 1\n"); exit(1); } //用于检测服务器端文件是否打开成功 if(buffer[0] =='N') { close(sockfd); ...
  • 客户端服务器编程模型: 客户端代码: #include #include #include #include #include #include #include #include #include #include #define MAXLINE 100; #define RIO_BUFSIZE 8192; int main()...
  • web服务器 C语言

    2016-02-18 12:58:37
    一个用C语言编写的WEB服务器,用socket编程
  • 我一个同学说c语言写的客户端并不能与java的服务端通信,因为没有端口,这让我很尴尬,按道理本机与虚拟机通信,我在客户端里面进去虚拟机的ip地址然后指定开一个端口就可以相互通信了,好歹也是学嵌入式的,...
  • c语言实现http服务器

    2018-09-27 10:24:26
    学习和理解http服务器的原理
  • C语言制作Web服务器

    万次阅读 多人点赞 2016-05-23 09:30:15
    本文,我们将使用C语言从零开始实现一个支持静态/动态网页的Web服务器。我们把这个服务器叫做Tiny。 背景知识客户端-服务器编程模型使用socket处理请求与响应HTTP协议与静/动态网页关键代码解析实验效果与源码 ...
  • 一个用C语言,实现104协议的,服务器端和客户端,都是2个源代码,即下载即用。不是很好用,仅提供参照
  • 嵌入式c语言连接http服务器

    热门讨论 2014-01-09 12:20:24
    嵌入式c语言连接http服务器,自己开发的,有注释,可用
  • C语言实现websocket服务器

    万次阅读 2017-03-05 19:25:00
    Websocket Echo Server Demo背景嵌入式设备的应用开发大都依靠C语言来完成,我去研究如何用C语言实现websocket服务器也是为了在嵌入式设备中实现一个ip camera的功能,用户通过网页访问到嵌入式设备的摄像头以及音频...
  • 最近由于本人对网络编程的喜爱,所以对一点关于...由于本人的能力有限,的可能过于简单,只适合初学者,欢迎大牛提出宝贵的意见,本人会感激不尽的。废话少说了,进入正题。 下图是一般socket 编程图。 服务器

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 126,399
精华内容 50,559
关键字:

c语言写服务器

c语言 订阅