QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1258|回复: 6

关于socket的一点弱弱的问题

[复制链接]
发表于 2005-9-28 22:05:20 | 显示全部楼层 |阅读模式
int main()
{
    int sockfd;
    int len;
    struct sockaddr_un address;
    int result;
    char ch = 'A';

/*  Create a socket for the client.  */

    sockfd = socket(AF_UNIX, SOCK_STREAM, 0);

/*  Name the socket, as agreed with the server.  */

    address.sun_family = AF_UNIX;
    strcpy(address.sun_path, "server_socket");
    len = sizeof(address);

/*  Now connect our socket to the server's socket.  */

    result = connect(sockfd, (struct sockaddr *)&address, len);

    if(result == -1) {
        perror("oops: client1");
        exit(1);
    }

/*  We can now read/write via sockfd.  */

    write(sockfd, &ch, 1);
    read(sockfd, &ch, 1);
    printf("char from server = %c\n", ch);
    close(sockfd);
    exit(0);
}
 楼主| 发表于 2005-9-28 22:06:32 | 显示全部楼层
main()
{
int server_sockfd, client_sockfd;
    int server_len, client_len;
    struct sockaddr_un server_address;
    struct sockaddr_un client_address;

/*  Remove any old socket and create an unnamed socket for the server.  */

    unlink("server_socket");
    server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);

/*  Name the socket.  */

    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);

/*  Create a connection queue and wait for clients.  */

    listen(server_sockfd, 5);
    while(1) {
        char ch;

        printf("server waiting\n");

/*  Accept a connection.  */

        client_len = sizeof(client_address);
        client_sockfd = accept(server_sockfd,
            (struct sockaddr *)&client_address, &client_len);

/*  We can now read/write to client on client_sockfd.  */

        read(client_sockfd, &ch, 1);
        ch++;
        write(client_sockfd, &ch, 1);
        close(client_sockfd);
    }
}
回复

使用道具 举报

 楼主| 发表于 2005-9-28 22:07:32 | 显示全部楼层
前面的是客户端,后面的是服务器,为什么要先unlink("server_socket");哪
客户端和服务器端生成的套接字是不同的吧,这个想不明白啊
回复

使用道具 举报

 楼主| 发表于 2005-9-29 16:20:32 | 显示全部楼层
救救我把,有谁知道啊
回复

使用道具 举报

发表于 2005-9-29 17:36:10 | 显示全部楼层
server_socket是个文件,是服务端建立的。
unlink是删除。
去看看《unix进程间通信》
回复

使用道具 举报

 楼主| 发表于 2005-9-29 20:15:34 | 显示全部楼层
谢谢啦
回复

使用道具 举报

发表于 2005-10-8 11:06:56 | 显示全部楼层
socket分server和client两种。
server端通常在本机上开一个port(比如http常用8080),然后就一直等待,直到有clinet要求连接。
client端向给定的server_address的port发送连接请求,如果server接受连接请求,那双方连接后就可以进行对话。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 02:07 , Processed in 0.053983 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表