自学内容网 自学内容网

Linux创建server服务器实现多方信息收发

一,服务端

        1.创建socket套接字,用于网络通信,同一台机器上的进程也可以通过本地套接字进行通信

       //1.socket

        s_fd = socket(AF_INET,SOCK_STREAM,0);

        if(s_fd == -1){

                perror("socket");

                exit(-1);

        }

        //server address

        s_addr.sin_family = AF_INET;

        s_addr.sin_port = htons(atoi(argv[2]));

        inet_aton(argv[1], &s_addr.sin_addr);

        2.bind函数:int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

sockfd:        socket文件描述符 

addr:            构造出IP地址 + 端口号

addrlen:       sizeof(addr)长度

返回值:         成功返回0,失败返回-1, 设置errno

作用: 为套接字分配名称    

当使用socket创建套接字时,它存在于名称空间(地址族)中,但没有为其分配地址。 bind() 将 addr 指定的地址分配给文件描述符 sockfd 引用的socket。

bind(s_fd,(struct sockaddr *)&s_addr, sizeof(struct sockaddr_in));

        3.listen()监听函数:在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被动连接。listen函数在一般在调用bind之后-调用accept之前调用。

listen(s_fd,10);

printf("wait\n");

        4.accept函数:

accept()接受一个客户端的连接请求,并返回一个新的套接字(被动监听客户端的三次握手连接请求,三次握手成功即建立连接成功)。所谓“新的”就是说这个套接字与socket()返回的用于监听和接受客户端的连接请求的套接字不是同一个套接字。与本次接受的客户端的通信是通过在这个新的套接字上发送和接收数据来完成的。原文链接:https://blog.csdn.net/weixin_43743711/article/details/106879165
 

主代码:

while(1){

        c_fd = accept(s_fd, (struct sockaddr *)&c_addr,&clen);

        if(c_fd == -1){

                perror("accept");

        }

        mark++;

        printf("get connect:%s\n",inet_ntoa(c_addr.sin_addr));

        if(fork() == 0){

                if(fork() == 0){

                        while(1){

                                sprintf(msg,"welcome No.%d client", mark);

                                write(c_fd,msg,strlen(msg));

                                sleep(2);

                        }

                }

                //5.read

                while(1){

                        memset(readBUF,0,sizeof(readBUF));

                        n_read = read(c_fd,readBUF,128);

                        if(n_read == -1)

                        {

                                perror("read");

                        }

                        else{

                                printf("\n get message:%d, %s\n",n_read,readBUF);

                        }

                }

              break;

        }

}

        头文件有:

#include<stdio.h>

#include<sys/types.h>

#include<sys/socket.h>

#include<netinet/in.h>

#include<arpa/inet.h>

#include<stdlib.h>

#include<string.h>

#include<unistd.h>

        效果图:


原文地址:https://blog.csdn.net/m0_74156325/article/details/145067137

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!