当前位置:Linux教程 - Linux - socket编程实例(全)

socket编程实例(全)



         /***仗剑行侠,笑傲江湖;写意恩仇,快哉乐哉. *****/
    /*云飞扬,e-mail:yfy001@etang.com,电话:025-4705268-23*/
    /*上一个好象有问题*/
    下面我们先编写一个非常简单的套接口客户端程序client,这个程序较为简单,它演示了一个无名的套接口连接,
    以及如何与一个服务器套接口连接,假设服务器套接口的名字是色server_socket.
    /*
    client.c
    */
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <stdio.h>
    #include <sys/un.h>
    #include <unistd.h>
    int main()
    {
    int sockfd;
    int len;
    struct sockaddr_un address;
    int result;
    char ch=A;
    sockfd=socket(AF_UNIX,SOCK_STREAM,0);
    /*以上建立客户端的套接口,采用AF_UNIX的unix域协议*/
    address.sun_family=AF_UNIX;
    strcpy(address.sun_path,"server_socket");
    len=sizeof(address);
    /*以上创建服务器套接口的地址,其中包括套接口类型,名称*/
    result=connect(sockfd,(struct sockaddr *)&address,len);

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

    }
    /*以上我们试图与服务器套接口建立连接*/
    write(sockfd,&ch,1);
    read(sockfd,&ch,1);
    /*如果成功,将向服务器端发送一个字符,然后读取服务器的回答*/

    printf("char from server=%c\n",ch);
    close(sockfd);
    exit(0);
    }

    /*
    server.c
    */
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <stdio.h>
    #include <sys/un.h>
    #include <unistd.h>
    int main()
    {
    int server_sockfd,client_sockfd;
    int server_len,client_len;
    struct sockaddr_un server_address;
    struct sockaddr_un client_address;
    unlink("server_socket");
    /*如果存在同名的套接口,则先删除*/
    server_sockfd=socket(AF_UNIX,SOCK_STREAM,0);
    /*以上建立套接口,这时候无名*/
    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);
    /*以上创建监听队列.等待用户的连接请求*/
    while(1)
    {
    char ch;
    printf("server waiting\n");
    client_sockfd=accept(server_sockfd,(struct sockaddr *)&client_address,&client_len);
    /*以上接受一个客户的请求*/
    read(client_sockfd,&ch,1);
    /*因为连接一旦建立,客户就会先发消息过来,所以服务器先读*/
    ch++;
    write(client_sockfd,&ch,1);
    /*把读取的字符串做简单处理,回送*/
    close(client_sockfd);
    }
    }

    发布人:云飞扬 来自: