首页 > 其他分享 >使用TCP 创建服务器 多个客户端连接

使用TCP 创建服务器 多个客户端连接

时间:2023-09-21 23:35:02浏览次数:43  
标签:socket int 创建 TCP 源码 sockfd 服务器 include 客户端

源码

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <unistd.h>//close
#include <sys/socket.h>//socket
#include <arpa/inet.h>//inet_pton
#include <netinet/in.h>// sockaddr_in
int main()
{
    //1、创建套接字
    int sockfd = socket(AF_INET,SOCK_STREAM,0);
    if(sockfd<0)
    {
        perror("socket");
        return -1;
    }
    //2、绑定指定地址
    struct sockaddr_in serveraddr;
    serveraddr.sin_family=AF_INET;
    serveraddr.sin_port=htons(8005);
    serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);
    bind(sockfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr));

    //3、套接字从主动变被动,并且创建队列保存连接客户端(监听)
    listen(sockfd,10);

    struct sockaddr_in cliaddr;
    socklen_t clilen=sizeof(cliaddr);

    //5、循环接受消息,并自动回复ok
    char buf[1024]="";
    int len;
    int fd_new;
    pid_t pid;
    while(1){

        //4、多次提取
        fd_new=accept(sockfd,(struct sockaddr *)&cliaddr,&clilen);
        //如果accept函数阻塞解除,说明提取到了一个客户端,我们需要一边跟这个客户端循环收发消息,一边继续提取
        pid=fork();
        if(pid<0)
        {
            close(fd_new);
            close(sockfd);
            return -1;
        }
        else if(pid==0){//任务1:循环收发消息
            close(sockfd);
            while(1){
            //接受消息
            len=recv(fd_new,buf,sizeof(buf),0);//如果客户端断开,会给服务器发送0长度数据包
            printf("recv:%s\n",buf);
            //回复ok
            send(fd_new,"ok",strlen("ok"),0);
            if(len==0)//如果收到了0长度数据包,说明客户端断开,服务器也跟着结束
                break;    
            }
        }
        else{//任务2:继续提取
            close(fd_new);
        }

    }
    //6、关闭套接字
    close(fd_new);
    close(sockfd);
    return 0;
}

编译时,加上线程库

gcc a.c -lpthread


标签:socket,int,创建,TCP,源码,sockfd,服务器,include,客户端
From: https://blog.51cto.com/u_16254384/7558285

相关文章

  • tcpdump后台不间断抓包
    版本1的抓包命令这两天排查一个小问题,需要在服务器上使用tcpdump24小时不间断抓包,这里简单记录下。先看下tcpdump的语法:tcpdump[-AbdDefhHIJKlLnNOpqStuUvxX#][-Bbuffer_size][-ccount][-Cfile_size][-Grotate_seconds][-F......
  • HTTP之下的TCP做了什么?抓包解释!
    理清HTTP之下的TCP流程,让你的HTTP水平更上一层(qq.com)首先,我们准备这样一段服务端代码:constexpress=require('express')constapp=express()app.get('/',function(req,res){res.setHeader('Connection','close')res.end('hell......
  • 使用亚马逊云服务器在 G4 实例上运行 Android 应用程序
    随着Android应用程序和游戏变得越来越丰富,其中有些甚至比PC上的软件更易于使用和娱乐,因此许多人希望能够在云上运行Android游戏或应用程序,而在EC2实例上运行Android的解决方案可以让开发人员更轻松地测试和运行Android应用程序。在这篇博客文章中,我们将展示如何使用N......
  • ETHERCAT主站转MODBUS TCP协议网关
     ETHERCAT主站转MODBUSTCP协议网关                                  JM-ECTM-TCP产品介绍JM-ECTM-TCP是自主研发的一款ETHERCAT主站功能的通讯网关。该产品主要功能是将ETHERCAT......
  • pve系统盘扩容、网络IP设置、端口映射、DHCP服务器
    pve系统盘扩容fdisk/dev/vda输入n然后按几下回车直到提示Createdanewpartition最后输入w退出pvcreate/dev/vda4vgextendpve/dev/vda4vgs #查看可用容量lvresize-r-L+40G/dev/pvelvs  #查看lv卷大小在Datacenter->pve->System->NetworkCreate一个新的Linux......
  • 服务器的维护是如何操作的
    服务器的维护是如何操作的服务器可以说是不可或缺的资源,因为现在网络技术发达,我们的生活也都离不开网络的存在,我们想要获取的业务、资料等大多是通过网络进行,所以想要顺应潮流并获得发展,肯定需要服务器来将企业的相关信息与产品等发布到网络中,供客户选择。那应该如何维护好服务器......
  • 【虹科干货】轻松简化数据库客户端工作,除了Proxy还有谁?
    随着业务拓展,单点redis无法满足越来越高的性能要求,但使用RedisOSSCluster和RedisSentinel来解决起问题太过复杂。此时,就需要RedisEnterpriseProxy来保持数据库操作和维护的简便性。大多数开发人员在构建应用程序时,一般会从小规模开始,使用简单的,它只有一个节点,仅仅需要应用程序......
  • 服务器停机或者崩溃的原因有哪些
    服务器停机或者崩溃的原因有哪些服务器停机或崩溃的原因有时很复杂,但常见的原因有以下五个。1.网络问题:当网站显示无法访问或无法找到时,会报告错误。通常情况下,服务器正常,但存在网络问题。2.系统过载由系统过载导致的服务器停机通常表明页面打开缓慢,甚至无法打开。系统可能会在一段......
  • tcpdump使用
    背景最近一直在排查线上问题,发现好多是客户自己网络的问题,因此此处记录下tcpdump使用命令1.先获取网卡名称iplinkshow2.使用tcpdump监控指定域名及端口tcpdump-i<网卡名称>-vnnhostwww.baidu.comxxx.pcap3.将xxx.pcap移到自己本地电脑,使用wireshark打开进行分......
  • WebService 调用服务器上exe应用程序
    转自:https://blog.csdn.net/tangkechu/article/details/7047147最近在一个项目中用到这样的需求,需要PDA通过WebService来启动服务器上的一个exe应用程序,这个exe应用程序是有界面的。当我通过以下代码来启动这个exe时,问题出现了。程序并没有运行,但是在任务管理器里面却可以看到这......