【网络编程】select实现服务器与客户端进行通信

1、运行1个服务器和2个客户端

实现效果:
        1、服务器和2个客户端互相聊天,服务器和客户端都需要使用select模型去实现
        2、服务器要监视2个客户端是否连接,2个客户端是否发来消息,以及服务器自己的标准输入流
        3、客户端要监视服务器是否发来消息,以及客户端自己的标准输入流
        4、在不开线程的情况下,实现互相聊天

小计:实现的结果是服务器能够同时和多个客户端进行通信,但是客户端之间不能进行通信

//Ser.c
#include <myhead.h>
#define SER_IP "192.168.2.7" // 服务器IP
#define SER_PORT 8888           // 服务器端口号

int main(int argc, const char *argv[])
{
    // 1、创建用于监听的套接字
    int sfd = -1;
    sfd = socket(AF_INET, SOCK_STREAM, 0);
    // 参数1:表示使用的是ipv4的通信
    // 参数2:表示使用tcp通信类型
    // 参数3:表示前面已经特定了通信协议
    if (sfd == -1)
    {
        perror("socket error");
        return -1;
    }

    printf("sfd = %d\n", sfd); // 3

    // 将端口号快速重用
    int reuse = 1;
    if (setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1)
    {
        perror("setsockopt error");
        return -1;
    }
    printf("端口号快速重用成功\n");

    // 2、绑定ip地址和端口号
    // 2.1填充地址信息结构体
    struct sockaddr_in sin;
    sin.sin_family = AF_INET;                // 地址族
    sin.sin_port = htons(SER_PORT);          // 端口号
    sin.sin_addr.s_addr = inet_addr(SER_IP); // IP地址
    // 2.2绑定
    if (bind(sfd, (struct sockaddr *)&sin, sizeof(sin)) == -1)
    {
        perror("bind error");
        return -1;
    }
    printf("bind success\n");

    // 3、启动监听,允许客户端连接
    if (listen(sfd, 128) == -1)
    {
        perror("listen error");
        return -1;
    }

    printf("listen success\n");

    // 4、当有客户端发来连接请求后创建新的用于通信的套接字
    // 如果不想接收客户端地址信息结构体,则无需传入参数2和参数3
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值