SOCKET编程之使用AF_UNIX实现本机数据流通信示例
2012-11-19 17:08
453 查看
本程序由服务器端程序和客户端程序两部分组成。
服务器端程序
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
int main()
{
int server_sockfd,client_sockfd;
int server_len,client_len;
struct sockaddr_un server_address;
struct sockaddr_un client_address;
int i,byte;
char ch_send,ch_rec;
unlink("server_socket");
server_sockfd=socket(AF_UNIX,SOCK_STREAM,0);
if(server_sockfd==-1)
{
perror("socket");
exit(1);
}
server_address.sun_family=AF_UNIX;
strcpy(server_address.sun_path,"server_socket");
server_len=sizeof(server_address);
bind(server_sockfd,(struct sockaddr *)&server_address,server_len);
listen(server_sockfd,5);
printf("server waiting for client connect\n");
client_len=sizeof(client_address);
client_sockfd=accept(server_sockfd,(struct sockaddr *)&client_address,(socklen_t *)&client_len);
printf("the server wait for client data\n");
for(i=0,ch_send='1';i<5;i++,ch_send++)
{
if((byte=read(client_sockfd,&ch_rec,1))==-1)
{
perror("read");
exit(1);
}
printf("the character receiver from client is %c\n",ch_rec);
sleep(1);
if(write(client_sockfd,&ch_send,1)==-1)
{
perror("write");
exit(1);
}
}
close(client_sockfd);
unlink("server_socket");
return 0;
}
客户端程序
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
int main()
{
int sockfd;
int len;
struct sockaddr_un address;
int result;
int i,byte;
char ch_recv,ch_send;
sockfd=socket(AF_UNIX,SOCK_STREAM,0);
if(sockfd==-1)
{
perror("socket");
exit(1);
}
address.sun_family=AF_UNIX;
strcpy(address.sun_path,"server_socket");
len=sizeof(address);
result=connect(sockfd,(struct sockaddr*)&address,len);
if(result==-1)
{
printf("ensure the server is up\n");
perror("connect");
exit(1);
}
for(i=0,ch_send='A';i<5;i++,ch_send++)
{
if(write(sockfd,&ch_send,1)==-1)
{
perror("write");
exit(1);
}
if(read(sockfd,&ch_recv,1)==-1)
{
perror("read");
exit(1);
}
printf("receive from server is %c\n",ch_recv);
}
close(sockfd);
return 0;
}
这个是socket的API函数的基础应用,我在这个基础上改编了一个较为复杂的程序,但不利于理解,所以还是把这个原始的贴出来,供借鉴
服务器端程序
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
int main()
{
int server_sockfd,client_sockfd;
int server_len,client_len;
struct sockaddr_un server_address;
struct sockaddr_un client_address;
int i,byte;
char ch_send,ch_rec;
unlink("server_socket");
server_sockfd=socket(AF_UNIX,SOCK_STREAM,0);
if(server_sockfd==-1)
{
perror("socket");
exit(1);
}
server_address.sun_family=AF_UNIX;
strcpy(server_address.sun_path,"server_socket");
server_len=sizeof(server_address);
bind(server_sockfd,(struct sockaddr *)&server_address,server_len);
listen(server_sockfd,5);
printf("server waiting for client connect\n");
client_len=sizeof(client_address);
client_sockfd=accept(server_sockfd,(struct sockaddr *)&client_address,(socklen_t *)&client_len);
printf("the server wait for client data\n");
for(i=0,ch_send='1';i<5;i++,ch_send++)
{
if((byte=read(client_sockfd,&ch_rec,1))==-1)
{
perror("read");
exit(1);
}
printf("the character receiver from client is %c\n",ch_rec);
sleep(1);
if(write(client_sockfd,&ch_send,1)==-1)
{
perror("write");
exit(1);
}
}
close(client_sockfd);
unlink("server_socket");
return 0;
}
客户端程序
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
int main()
{
int sockfd;
int len;
struct sockaddr_un address;
int result;
int i,byte;
char ch_recv,ch_send;
sockfd=socket(AF_UNIX,SOCK_STREAM,0);
if(sockfd==-1)
{
perror("socket");
exit(1);
}
address.sun_family=AF_UNIX;
strcpy(address.sun_path,"server_socket");
len=sizeof(address);
result=connect(sockfd,(struct sockaddr*)&address,len);
if(result==-1)
{
printf("ensure the server is up\n");
perror("connect");
exit(1);
}
for(i=0,ch_send='A';i<5;i++,ch_send++)
{
if(write(sockfd,&ch_send,1)==-1)
{
perror("write");
exit(1);
}
if(read(sockfd,&ch_recv,1)==-1)
{
perror("read");
exit(1);
}
printf("receive from server is %c\n",ch_recv);
}
close(sockfd);
return 0;
}
这个是socket的API函数的基础应用,我在这个基础上改编了一个较为复杂的程序,但不利于理解,所以还是把这个原始的贴出来,供借鉴
相关文章推荐
- Linux网络编程:使用select函数实现socket 收发数据
- linux 网络编程:使用两线程实现socket同时收发数据
- linux网络编程:使用多进程实现socket同时收发数据
- 使用 AF_UNIX 实现本机数据流通信
- 网络编程(33)—— 使用AF_UNIX构建本地通信的socket服务端和客户端
- linux网络编程:使用多进程实现socket同时收发数据
- linux 网络编程:使用两线程实现socket同时收发数据
- linux 网络编程:使用两线程实现socket同时收发数据
- linux 网络编程:使用两线程实现socket同时收发数据
- 使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)
- .NET数据库编程求索之路--6.使用ADO.NET实现(三层架构篇-使用List传递数据-基于存储过程)(2)
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分(来源:http://blog.csdn.net/yangjundeng/archive/2005/03/17/321920.aspx)
- 使用线程池实现Server端,Socket编程?
- 本地socket使用AF_UNIX
- 使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)
- .NET数据库编程求索之路--4.使用ADO.NET实现(三层架构篇-使用Table传递数据)(1)
- Android中使用Socket来实现服务器端和客户端,进行数据通信(使用原生Socket)
- (转载)Telnet协议详解及使用C# 用Socket 编程来实现Telnet协议
- [置顶] 使用多线程实现多客户端的连接(通过Socket实现TCP编程)
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分