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/ (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |