进程间通信—Socket编程
来源:互联网 发布:2016网络大电影排行 编辑:程序博客网 时间:2024/06/15 12:57
linux下Socket编程的原理大家参考下面这篇博客:
http://blog.csdn.net/xiaoweige207/article/details/6211577
我就不多介绍了,下面这是一个小例子。
客户端代码:
#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netdb.h>#include <string.h>#include <unistd.h>#include <stdlib.h>#include <sys/wait.h>#include <sys/stat.h>int main(){int fd,ret;char buff[1024]={0};struct sockaddr_in servaddr;fd=socket(AF_INET,SOCK_STREAM,0);if(fd<0){perror("opening socket error");return -1;}memset(&servaddr,0,sizeof(servaddr));servaddr.sin_family=AF_INET;if(inet_pton(AF_INET,"192.168.7.92",&servaddr.sin_addr.s_addr)<=0){perror("IP error");return -2;}servaddr.sin_port=9000;ret=connect(fd,(struct sockaddr *)&servaddr,sizeof(servaddr));if(ret < 0){perror("connecting error");goto failed;}while(1){printf("All ready,please enter the message....\n");memset(buff,0,sizeof(buff));if(fgets(buff,sizeof(buff)-1,stdin) == NULL){perror("input error");break;}ret=write(fd,buff,strlen(buff));if(ret < 0){perror("write to socket error");break;}if((ret=read(fd,buff,sizeof(buff)-1))<0){perror("reading error");break;}if(ret == 0){printf("Server disconnect...\n");break;}printf("The message is:%s",buff);}failed:close(fd);return 0;}
服务器端:
#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netdb.h>#include <string.h>#include <unistd.h>#include <stdlib.h>#include <sys/wait.h>#include <sys/stat.h>int main(){int fd,ret;char buff[1024]={0};struct sockaddr_in servaddr,clivaddr;int len=sizeof(clivaddr);fd=socket(AF_INET,SOCK_STREAM,0);if(fd<0){perror("opening socket error");return -1;}memset(&servaddr,0,sizeof(servaddr));servaddr.sin_family=AF_INET;if(inet_pton(AF_INET,"192.168.7.92",&servaddr.sin_addr.s_addr)<=0){perror("IP error");return -2;}servaddr.sin_port=9000;ret=bind(fd,(struct sockaddr *)&servaddr,sizeof(servaddr));if(ret < 0 ){perror("binding error");goto failed;}if((ret=listen(fd,10) != 0)){perror("listening error");goto failed;}int nsock;while(1){nsock=accept(fd,(struct sockaddr *)&clivaddr,&len);if(nsock < 0){perror("accept");break;}else{printf("socket service starting...\n");}//ret=connect(fd,(struct sockaddr *)&servaddr,sizeof(servaddr));pid_t pid;pid=fork();if(pid == 0){close(fd);while(1){memset(buff,0,sizeof(buff)-1);ret=read(nsock,buff,sizeof(buff)-1);if(ret < 0){perror("reading error\n");return -1;}ret=write(nsock,buff,strlen(buff));if(ret < 0){perror("write error\n");return -2;}}close(nsock);exit(0);}close(nsock);}failed:close(fd);return 0;}
运行时,首先运行服务器,
在客户端从键盘中循环读入数据,然后回车输出,
由于我用了fork()创建了子进程来处理接受的数据,所以就成了一个一个服务器对多个客户端,
可以同时运行多个服务器来发送数据。
程序运行结果:
我运行了两个客户端,可以同时收发数据。
- 进程间通信—Socket编程
- 进程间通信之-socket编程原理
- 进程间通信-socket
- 进程间通信---------socket
- socket进程间通信
- socket进程间通信
- Socket进程间通信
- 进程间通信---Socket
- Linux进程间通信-基于socket,过渡到网络编程
- 进程间通信—local socket
- Socket通信中的多进程编程实例
- Socket通信中的多进程编程实例
- Socket通信中的多进程编程实例
- Socket通信中的多进程编程实例
- socket通信的多进程编程:
- Socket通信中的多进程编程实例
- Socket 实现进程间通信
- socket实现进程间通信
- ANT
- Linux上程序调试的基石(1)--ptrace
- mysql
- UVA 12587 Reduce the Maintenance Cost 解题报告
- 如何实现WebSphere Application Server 6集群环境下的定时服务
- 进程间通信—Socket编程
- Oracle Managed Files(OMF)
- 创建表空间
- C#运算符
- Ubuntu下搭建WebDAV服务器
- GitHub 上删除文件
- 二叉树的前序中序线索化及对对应线索二叉树的遍历
- C++,继承、虚函数解惑!
- mysql中,已经建立的列添加 auto-increment