|

- 帖子
- 68
- 主题
- 0
- 精华
- 0
- 可用积分
- 116
- 专家积分
- 0
- 在线时间
- 40 小时
- 注册时间
- 2008-05-16
- 最后登录
- 2010-01-20
状态:...当前离线...
[博客]
[短信]
|
咋提交后,变成这得型了。再试一次
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define SOCKETNAME "Socket"
#define PRINT(fmt...) \
do {\
printf("%s[%d]:", __FILE__, __LINE__);\
printf(fmt);\
}while(0)
int main(void)
{
struct sockaddr_un sa;
int forkpid = 0;
(void)unlink(SOCKETNAME);
strcpy(sa.sun_path, SOCKETNAME);
sa.sun_family = AF_UNIX;
forkpid = fork();
if(forkpid == 0){/* child---client */
int fd_skt;
char buf[100];
int rlen = 0;
int wlen = 0;
int connect_ret = 0;
PRINT("client=>pid: %d\n", getpid());
fd_skt = socket(AF_UNIX, SOCK_STREAM, 0);
PRINT("client=>fd_skt: %d\n", fd_skt);
if(fd_skt < 0){
exit(-1);
}
while((connect_ret = connect(fd_skt, (struct sockaddr *)&sa, sizeof(sa))) == -1){
PRINT("client=>connect_ret: %d\n", connect_ret);
if(errno == ENOENT){
PRINT("client=>\n");
sleep(1);
continue;
}
else{
exit(-1);
}
}
PRINT("client=>write\n");
wlen = write(fd_skt, "Hello!", 7);
PRINT("client=>wlen = %d\n", wlen);
if(wlen < 0){
exit(-1);
}
sleep(1);
rlen = read(fd_skt, buf, sizeof(buf));
PRINT("client=>rlen = %d\n", rlen);
if(rlen < 0){
exit(-1);
}
PRINT("client=>client read: %s\n", buf);
rlen = close(fd_skt);
PRINT("client=>close() = %d\n", rlen);
if(rlen < 0){
perror("close()");
//exit(-1);
}
PRINT("client=>exit\n");
}
else{/* parent---server */
int fd_skt, fd_client;
char buf[100];
struct sockaddr_un dst;
int rlen = 0;
int wlen = 0;
PRINT("server=>child pid: %d\n", forkpid);
//socket
fd_skt = socket(AF_UNIX, SOCK_STREAM, 0);
PRINT("server=>fd_skt: %d\n", fd_skt);
if(fd_skt < 0){
exit(-1);
}
//bind
if(bind(fd_skt, (struct socketaddr *)&sa, sizeof(sa)) < 0){
PRINT("server=>listen error!\n");
exit(-1);
}
//listen
if(listen(fd_skt, SOMAXCONN) < 0){
perror("server=>listen");
exit(-1);
}
//accept
fd_client = accept(fd_skt, NULL, 0);
PRINT("server=>fd_client: %d\n", fd_client);
if(fd_client < 0){
perror("accept:");
exit(-1);
}
//read and write
while(!rlen){
sleep(1);
rlen = read(fd_client, buf, sizeof(buf));
PRINT("server=>rlen: %d\n", rlen);
if(rlen < 0){
PRINT("server=>read error!\n");
exit(-1);
}
}
PRINT("server=>read: %s\n", buf);
wlen = write(fd_client, "Goodbye!", 9);
PRINT("server=>wlen: %s\n", wlen);
if(wlen < 0){
exit(-1);
}
if(close(fd_skt) < 0){
PRINT("server=>close fail!\n");
exit(-1);
}
if(close(fd_client) < 0){
PRINT("server=>close fail!\n");
exit(-1);
}
exit(0);
}
} |
|