socket编程(2)—— 一对多通信

本文介绍了TCP的一对多通信模型,包括服务端和客户端的编程步骤。服务端通过socket、bind、listen、accept实现连接,并使用新描述符进行通信。客户端与一对一通信相似,但可以通过循环发送不同信息。此外,提供了练习,如增加客户端输入功能,支持多次交互,并在服务器端用fork启动多进程以并行处理多个客户端连接。
摘要由CSDN通过智能技术生成

1 一对多模型,TCP的编程步骤

服务端:
1、socket()获得一个sockfd。注意第二个参数必须SOCK_STREAM.
2、准备通信地址(必须服务器的)
3、bind()绑定。(开放了端口,允许客户端连接)
4、监听客户端 listen()函数
5、等待客户端的连接 accept(),返回用于交互的socket描述符
6、使用第5步返回sockt描述符,进行读写通信。
7、关闭sockfd。

客户端:
客户端的代码与一对一的一样。注意第二个参数必须SOCK_STREAM.

TCP一对多模型,有两类描述符:
第一步的描述符不再参与信息交互,只是等待客户端的连接(accept),accept()在客户端连接上来后,会返回一个新的描述符,用于读写通信。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>

int main(){
    int sockfd = socket(AF_INET,SOCK_STREAM,0);
    if (sockfd == -1){
        perror("socket"),exit(-1);
    }

    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(2222);
    addr.sin_addr.s_addr = inet_addr("192.168.66.11");
    int res = bind(sockfd,(struct sockaddr*)&addr,
            sizeof(addr));
    if (res == -1){
        perror("bind"),exit(-1);
    }
    printf("bind ok\n");

    listen(sockfd,100);//监听

    struct sockaddr_in client;
    socklen_t len = sizeof(client);
    int fd = accept(sockfd,(struct sockaddr*)&client,&len);
    char *from = inet_ntoa(client.sin_addr);//十
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值