您的位置:首页 > 运维架构 > Linux

linux socket编程基于本地unix域格式的协议族

2010-05-11 10:16 465 查看
头文件:

#include <unistd.h>

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include <errno.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <sys/un.h>

#include <netdb.h>

#include <arpa/inet.h>

#include <sys/select.h>

服务器端代码:

int main(int argc, char **argv)

{

struct sockaddr_un address;

int sock, conn;

int addrLength;

char buf[1024] = {0};

char *msg = "I has recived";

if ((sock = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)

{

perror("socket");

exit(0);

}

unlink("foo.sock");

address.sun_family = AF_UNIX;

strcpy(address.sun_path, "foo.sock");

addrLength = sizeof(address.sun_family) + strlen(address.sun_path);

if(bind(sock, (struct sockaddr *) &address, addrLength))

perror("bind");

if(listen(sock, 5))

perror("listen");

while((conn = accept(sock, (struct sockaddr *) &address, &addrLength)) >= 0)

{

recv(conn, buf, sizeof(buf), 0);

printf("%s/n", buf);

send(conn, msg, strlen(msg), 0);

}

return 0;

}

客户端代码:

#define SOCK_PATH "foo.sock"

int main(int argc, char **argv)

{

int client_fd;

int len;

ssize_t I;

char *msg = "hello server";

char buf[1024] = {0};

struct sockaddr_un remote;

if((client_fd = socket(AF_LOCAL, SOCK_STREAM, 0)) == -1)

{

perror("socket()");

exit(0);

}

remote.sun_family = AF_LOCAL;

strcpy(remote.sun_path, SOCK_PATH);

len = sizeof(remote);

//puts("hello, hello, hello, hello");

if(connect(client_fd, (struct sockaddr *)&remote, len) == -1)

{

strerror(errno);

exit(0);

}

//puts("world, world, world");

if(send(client_fd, msg, strlen(msg), 0) == -1)

{

strerror(errno);

exit(0);

}

puts("hhhhhhh");

if(recv(client_fd, buf, sizeof(buf), 0) == -1)

{

perror("recv:");

exit(0);

}

printf("%s/n", buf);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: