基于数据流的原始套接字
2012-11-12 13:35
232 查看
服务器端代码:
#include <stdlib.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#define SA struct sockaddr
#define N 64
int main(int argc, char *argv[])
{
int listenfd, connfd, nbyte;
socklen_t addr_len;
char buf
;
struct sockaddr_un myaddr, peeraddr;
if (argc < 2)
{
printf("input format is: %s <socket_file>", argv[0]);
exit(1);
}
//int socket(int domain, int type, int protocol);
if ((listenfd = socket(PF_UNIX, SOCK_STREAM, 0)) == -1)
{
perror("socket fail");
exit(1);
}
unlink(argv[1]);
// int bind(int sockfd, const struct sockaddr *addr,
// socklen_t addrlen);
bzero(&myaddr, sizeof(myaddr));
myaddr.sun_family = PF_UNIX;
strcpy(myaddr.sun_path, argv[1]);
if (bind(listenfd, (SA *)&myaddr, sizeof(myaddr)) == -1)
{
perror("bind fail");
exit(1);
}
// int listen(int sockfd, int backlog);
if (listen(listenfd, 5) == -1)
{
perror("listen fail");
exit(1);
}
//int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
addr_len = sizeof(peeraddr);
if ((connfd = accept(listenfd, (SA *)&peeraddr, &addr_len)) == -1)
{
perror("accept fail");
exit(1);
}
//printf("the client is %s:%d\n", inet_ntoa(peeraddr.sin_addr), ntohs(cli_addr.sin_port));
if ((nbyte = recv(connfd, buf, N, 0)) == -1)
{
perror("read fail\n");
exit(1);
}
printf("recv from %s : %s", peeraddr.sun_path, buf);
close(connfd);
return 0;
}
客户端代码:
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/un.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#define N 64
#define SA struct sockaddr
int main(int argc, char *argv[])
{
int connfd;
char buf
;
struct sockaddr_un ser_addr;
if (argc < 2)
{
printf("input format is:%s <server_socket_file>\n", argv[0]);
exit(1);
}
//int connect(int sockfd, const struct sockaddr *serv_addr,
// socklen_t addrlen);
bzero(&ser_addr, sizeof(ser_addr));
ser_addr.sun_family = PF_UNIX;
strcpy(ser_addr.sun_path, argv[1]);
if ((connfd = socket(PF_UNIX, SOCK_STREAM, 0)) == -1)
{
perror("socket fail\n");
exit(1);
}
if (connect(connfd, (SA *)&ser_addr, sizeof(ser_addr)) == -1)
{
perror("connect fail");
exit(1);
}
strcpy(buf, "this is unix stream socket\n");
send(connfd, buf, N, 0);
return 0;
}
#include <stdlib.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#define SA struct sockaddr
#define N 64
int main(int argc, char *argv[])
{
int listenfd, connfd, nbyte;
socklen_t addr_len;
char buf
;
struct sockaddr_un myaddr, peeraddr;
if (argc < 2)
{
printf("input format is: %s <socket_file>", argv[0]);
exit(1);
}
//int socket(int domain, int type, int protocol);
if ((listenfd = socket(PF_UNIX, SOCK_STREAM, 0)) == -1)
{
perror("socket fail");
exit(1);
}
unlink(argv[1]);
// int bind(int sockfd, const struct sockaddr *addr,
// socklen_t addrlen);
bzero(&myaddr, sizeof(myaddr));
myaddr.sun_family = PF_UNIX;
strcpy(myaddr.sun_path, argv[1]);
if (bind(listenfd, (SA *)&myaddr, sizeof(myaddr)) == -1)
{
perror("bind fail");
exit(1);
}
// int listen(int sockfd, int backlog);
if (listen(listenfd, 5) == -1)
{
perror("listen fail");
exit(1);
}
//int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
addr_len = sizeof(peeraddr);
if ((connfd = accept(listenfd, (SA *)&peeraddr, &addr_len)) == -1)
{
perror("accept fail");
exit(1);
}
//printf("the client is %s:%d\n", inet_ntoa(peeraddr.sin_addr), ntohs(cli_addr.sin_port));
if ((nbyte = recv(connfd, buf, N, 0)) == -1)
{
perror("read fail\n");
exit(1);
}
printf("recv from %s : %s", peeraddr.sun_path, buf);
close(connfd);
return 0;
}
客户端代码:
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/un.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#define N 64
#define SA struct sockaddr
int main(int argc, char *argv[])
{
int connfd;
char buf
;
struct sockaddr_un ser_addr;
if (argc < 2)
{
printf("input format is:%s <server_socket_file>\n", argv[0]);
exit(1);
}
//int connect(int sockfd, const struct sockaddr *serv_addr,
// socklen_t addrlen);
bzero(&ser_addr, sizeof(ser_addr));
ser_addr.sun_family = PF_UNIX;
strcpy(ser_addr.sun_path, argv[1]);
if ((connfd = socket(PF_UNIX, SOCK_STREAM, 0)) == -1)
{
perror("socket fail\n");
exit(1);
}
if (connect(connfd, (SA *)&ser_addr, sizeof(ser_addr)) == -1)
{
perror("connect fail");
exit(1);
}
strcpy(buf, "this is unix stream socket\n");
send(connfd, buf, N, 0);
return 0;
}
相关文章推荐
- 基于socket原始套接字的网络嗅探器
- 基于原始套接字(raw socket)的网络抓包工具
- 基于原始套接字的嗅探器
- 【LIUNX】---TCP/IP学习与实践[基于原始套接字的rootkit]
- 基于原始套接字的嗅探器
- Windows 7 环境下基于原始套接字和ICMP的路由探测开发的问题【1】
- 基于嗅探原理的原始套接字木马
- 基于嗅探原理的原始套接字木马编写原理
- TraceRoute(tracert)源码(基于原始套接字实现)
- Windows下基于原始套接字的回射客户端
- TraceRoute(tracert)源码(基于原始套接字实现)
- 基于原始套接字(raw socket)的网络抓包工具
- 基于数据包的原始套接字
- TCP/IP学习与实践[基于原始套接字的rootkit]
- 基于嗅探原理的原始套接字木马
- 基于C语言与原始套接字实现Ping程序
- Windows下基于原始套接字的回射客户端的源码
- 基于数据流的挖掘算法研究
- linux 网络编程--原始套接字(下)
- Linux网络编程:原始套接字编程及实例分析