#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <arpa/inet.h>
 #include <unistd.h>
 #include <pthread.h>
 #include <errno.h>
 #define DAEMON_PORT                8888
 #define MAX_LISTEN                1024

 ];

 int adminserver();
 void pthread_adminserver(int client_sd);

 int main(int argc, char** argv){
     strcpy(get_manager_ip, argv[]);
     adminserver();
 }
 int adminserver()
 {
     ;
     ;
     ;
     ;
     FILE *fp;
     int res;
     int client_sd;
     int server_sd;
     int reuse_addr;
     pthread_t p_tcpserver;
     int client_addr_size ;

     struct sockaddr_in client_addr;
     struct sockaddr_in server_addr;
     ];
     ];
     ];

     char *pt;
     char *edit;

     sprintf(cmd_ip,"ifconfig %s |grep 'addr:' >/get_manager_ip",get_manager_ip);
     system(cmd_ip);

     fp = fopen("/get_manager_ip","rb");
     if (fp == NULL)
     {
         printf("Cann't open get_manger_ip file!\n");
         exit(-);
     }

     memset(line,,);
     fgets(line,,fp);
     fclose(fp);

     pt=strstr(line, "addr:");
     if (pt != NULL)
     {
         pt+=;
         edit=strtok(pt," ");
         strcpy(listen_ip,edit);
     }

     server_sd=socket( AF_INET, SOCK_STREAM,  );

     )
     {
         printf("ERROR: Cann't create socket!!!\n");
         exit(-);
     }

     bzero(&server_addr, sizeof(struct sockaddr));
     server_addr.sin_family = AF_INET;
     server_addr.sin_addr.s_addr=inet_addr(listen_ip);
     server_addr.sin_port   = htons(DAEMON_PORT);  

     reuse_addr = ;
      )
     {
         printf("setsockopt error\n");
         close(server_sd);
            ;
     }

     res = bind(server_sd, (struct sockaddr *)&server_addr, sizeof(server_addr));
      )
     {
         printf("Cann't bind!res = %d,erro:%d, reason:%s.\n",res, errno, strerror(errno));
         close(server_sd);
         exit(-);
     }  

      ) {
         printf("Cann't listen!\n");
         close(server_sd);
         exit(-);
     }

     )
     {

         client_addr_size = sizeof(client_addr);
         client_sd = accept( server_sd, (struct sockaddr *)&client_addr, (socklen_t *)&client_addr_size);
         )
         {
             printf("Could not create thread check_work_time\n");
             return ;
         }
     }
     close(server_sd);
     exit();
 }

 void pthread_adminserver(int client_sd)
 {
     ;
     int rc;
     ];
      )
         {             //线程处理某个客户端的连接
             memset(buffer,,);
             rc=read(client_sd,buffer,);
             ){
             close(client_sd);  //关闭线程处理的客户端连接
             pthread_exit();//终止该线程
             }
             printf("read date:\"%s\"\n",buffer);

         }
         close(client_sd);  //关闭线程处理的客户端连接
         pthread_exit();//终止该线程
 }

通过线程去处理单条tcp连接,传入网卡名来获取本地所需使用的ip地址,(不同的linux系统需要做点修改,在查询关键字 “addr:”处)

linux c socket 并发 服务端的更多相关文章

  1. linux c socket笔记 -服务端

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types. ...

  2. java socket实现服务端,客户端简单网络通信。Chat

    之前写的实现简单网络通信的代码,有一些严重bug.后面详细写. 根据上次的代码,主要增加了用户注册,登录页面,以及实现了实时显示当前在登录状态的人数.并解决一些上次未发现的bug.(主要功能代码参见之 ...

  3. linux下svn(subversion)服务端添加工程及配置权限

    linux下svn(subversion)服务端添加工程及配置权限 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/9010507.html 此篇我只是将所做过的 ...

  4. linux网络编程学习笔记之三 -----多进程并发服务端

    首先是fork()函数.移步APUE 8.3.  比較清晰的解释能够參考http://blog.csdn.net/lingdxuyan/article/details/4993883和http://w ...

  5. python网络编程:socket、服务端、客户端

    本文内容: socket介绍 TCP: 服务端 客户端 UDP: 服务端 客户端 首发时间:2018-02-08 01:14 修改: 2018-03-20 :重置了布局,增加了UDP 什么是socke ...

  6. Socket客户端/服务端简单实例

    1.client端 package demo.socket; import java.io.BufferedReader;import java.io.IOException;import java. ...

  7. java.net.SocketException:Software caused connection abort: recv failed 异常分析 +socket客户端&服务端代码

    java.net.SocketException:Software caused connection abort: recv failed 异常分析 分类: 很多的技术 2012-01-04 12: ...

  8. 在windows系统上安装VMware Workstation虚拟机,然后在虚拟机VMware Workstation上安装linux系统,在linux系统安装xshell的服务端,在windows系统上安装xshell。用windows系统上的xshell连接到linux

    第一步:安装xshell: 去百度   xshell ,然后安装一下就可以了.就是普通的软件安装,在这里不做过多的接收. 第二步:安装虚拟机VMware Workstation 百度安装,不做过介绍 ...

  9. JAVA Socket获取服务端信息

    1.Socket.getInetAddress(),获取服务端地址. 2.Socket.getPort(),获取服务端端口.

随机推荐

  1. MAVEN学习(初级)

    1. 项目管理利器 MAVEN 学习,参考慕课网 :http://www.imooc.com/search/?words=maven 2. 下载MEAVN 地址:http://maven.apache ...

  2. JVM学习之类加载

    该文使用Hotspot    JDK1.7 一.类加载器 1.什么是类加载器 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java ...

  3. Castle Windsor 学习-----Installer的几种安装方式

    翻译 当使用依赖注入容器时,你首先要向容器中注册你的组件,Windsor使用installers(该类型实现IWindsorInstaller接口)来封装和隔离注册的逻辑,可以使用Configurat ...

  4. 1212: [HNOI2004]L语言

    1212: [HNOI2004]L语言 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 643  Solved: 252[Submit][Status] ...

  5. 利用cropper插件裁剪本地图片,然后将裁剪过后的base64图片上传至七牛云空间

    现在做的项目需要做一些图片处理,由于时间赶急,之前我便没有处理图片,直接将图片放在input[type=file]里面,以文件的形式提交给后台,这样做简直就是最低级的做法,之后各种问题便出来了,人物头 ...

  6. ES3:ElasticSearch 索引

    ElasticSearch是文档型数据库,索引(Index)定义了文档的逻辑存储和字段类型,每个索引可以包含多个文档类型,文档类型是文档的集合,文档以索引定义的逻辑存储模型,比如,指定分片和副本的数量 ...

  7. 通过spring 中的@Scheduled来执行定时任务

    以前开发定时任务的功能的时候,是框架里面写好的quartz配置方式,由于功力尚浅,感觉定时跑披定时任务什么的云里雾里,很高大上,每次都不知道怎么修改配置,后来几次接触定时任务发现,还是比较好掌握的,特 ...

  8. python安装插件包注意事项

    注意!注意!注意!安装以来lib库时强烈建议使用pip安装:原因:nu1:用exe安装会出现各种意想不到让您惊讶的错误!!!nu2:这种错误很难解决且花费无用功!!! 使用pip安装: nu1:使用. ...

  9. 《Machine Learning》系列学习笔记之第二周

    第二周 第一部分 Multivariate Linear Regression Multiple Features Note: [7:25 - θT is a 1 by (n+1) matrix an ...

  10. [译]Selenium Python文档:四、元素定位

    要定位一个页面中的元素有多中策略和方法.你可以根据实际情况选择其中最为合适的.Selenium为定位页面元素提供了下面的这些方法: find_element_by_id(使用id) find_elem ...