加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux进程间通信学习:如何使用流套接字

发布时间:2016-01-16 04:16:24 所属栏目:Linux 来源:网络整理
导读:前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算

sockserver.c是一个服务器程序,它首先创建套接字,然后绑定一个端口再监听套接字,忽略子进程的停止消息等,然后它进入循环,一直循环检查是否有客户连接到服务器,如果有,则调用fork创建一个子进程来处理请求。利用read系统调用来读取客户端发来的信息,利用write系统调用来向客户端发送信息。这个服务器的工作非常简单,就是把客户发过来的字符+1,再发送回给客户。

sockclient.c是一个客户程序,它同样要先创建套接,然后连接到指定IP端口服务器,如果连接成功,就用write来发送信息给服务器,再用read获取服务器处理后的信息,再输出。

服务器sockserver.c的源代码如下:

#include <unistd.h>  
#include <sys/types.h>  
#include <sys/socket.h>  
#include <netinet/in.h>  
#include <signal.h>  
#include <stdio.h>  
#include <stdlib.h>  
      
int main()  
{  
    int server_sockfd = -1;  
    int client_sockfd = -1;  
    int client_len = 0;  
    struct sockaddr_in server_addr;  
    struct sockaddr_in client_addr;  
    //创建流套接字  
    server_sockfd = socket(AF_INET, SOCK_STREAM, 0);  
<span style="white-space:pre">  </span>//设置服务器接收的连接地址和监听的端口  
    server_addr.sin_family = AF_INET;//指定网络套接字  
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//接受所有IP地址的连接  
    server_addr.sin_port = htons(9736);//绑定到9736端口  
    //绑定(命名)套接字  
    bind(server_sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));  
    //创建套接字队列,监听套接字  
    listen(server_sockfd, 5);  
    //忽略子进程停止或退出信号  
    signal(SIGCHLD, SIG_IGN);  
          
    while(1)  
    {  
        char ch = '';  
        client_len = sizeof(client_addr);  
        printf("Server waitingn");  
        //接受连接,创建新的套接字  
        client_sockfd = accept(server_sockfd, (struct sockaddr*)&client_addr, &client_len);  
      
        if(fork() == 0)  
        {  
            //子进程中,读取客户端发过来的信息,处理信息,再发送给客户端  
            read(client_sockfd, &ch, 1);  
            sleep(5);  
            ch++;  
            write(client_sockfd, &ch, 1);  
            close(client_sockfd);  
            exit(0);  
        }  
        else
        {  
            //父进程中,关闭套接字  
            close(client_sockfd);  
        }  
    }  
}

查看本栏目更多精彩内容:http://www.bianceng.cn/OS/Linux/

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读