IPv6網絡編程代碼示例

server端

#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>
#include<unistd.h>
#include<arpa/inet.h>

#define BUF_LEN 1024
#define MYPORT 8888
#define BACKLOG 10

int main(int argc, char **argv)
{
        int s_s;
        int s_c;

        socklen_t len;
        int err = -1;

        struct sockaddr_in6 local_addr;
        struct sockaddr_in6 client_addr;
        char buf[BUF_LEN + 1];

        s_s = socket(PF_INET6, SOCK_STREAM, 0);
        if(s_s == -1) {
                perror("socket error");
                return(1);
        } else {
                printf("socket() success\n");
        }

        bzero(&local_addr, sizeof(local_addr));
        local_addr.sin6_family = PF_INET6;
        local_addr.sin6_port = htons(MYPORT);
        local_addr.sin6_addr = in6addr_any;

        err = bind(s_s, (struct sockaddr *)&local_addr, sizeof(struct sockaddr_in6));
        if(err = -1) {
                perror("bind error-->");
//              return(1);
        } else {
                printf("bind() success\n");
        }

        err = listen(s_s, BACKLOG);

        if(err = -1) {
                perror("listen error");
//              return(1);
        } else {
                printf("listen() success\n");
        }


        while(1) {
                len = sizeof(struct sockaddr);

//              printf("=================\n");
                s_c = accept(s_s, (struct sockaddr*)&client_addr, &len);

                if(s_c == -1) {
                        perror("accept error");
                        return(errno);
                } else {
                        inet_ntop(AF_INET6, &client_addr.sin6_addr, buf, sizeof(buf));
                        printf("a client from ip: %s, port: %d, socket %d\n", buf, client_addr.sin6_port, s_c);
                }
                bzero(buf, BUF_LEN + 1);
                strcpy(buf, "From Server");
                len = send(s_c, buf, strlen(buf), 0);
                if(len < 0){
                        printf("message '%s' send error, error:%d, '%s'\n", buf, errno, strerror(errno));
                } else {

                        printf("message '%s' send success:%d bytes\n", buf, len);
                }
                bzero(buf, BUF_LEN + 1);
                len = recv(s_c, buf, BUF_LEN, 0);
                if(len < 0){
                        printf("recv message error, error:%d, '%s'\n", buf, errno, strerror(errno));
                } else {

                        printf("message '%s' recv success:%d bytes\n", buf, len);
                }
                close(s_c);
        }
        close(s_s);
        return 0;

}

        

client

#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<sys/socket.h>
#include<resolv.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#define BUF_LEN 1024
#define MYPORT 8888
#define BACKLOG 10

int main(int argc, char **argv)
{
        int s_c;
        socklen_t len;
        int err = -1; 
        struct sockaddr_in6 server_addr;
        char buf[BUF_LEN + 1]; 

        s_c = socket(PF_INET6, SOCK_STREAM, 0); 

        bzero(&server_addr, sizeof(server_addr));
        server_addr.sin6_family = PF_INET6;
        server_addr.sin6_port = htons(MYPORT);
        server_addr.sin6_addr = in6addr_any;

        err = connect(s_c, (struct sockaddr*)&server_addr, sizeof(server_addr));

        bzero(buf, BUF_LEN+1);
        len = recv(s_c, buf, BUF_LEN, 0); 
        printf("RECVED: %d bytes: %s\n", len, buf);
        bzero(buf, BUF_LEN + 1); 
        strcpy(buf, "From client");
        len = send(s_c, buf, strlen(buf), 0); 
        close(s_c);
        return 0;

}

發佈了54 篇原創文章 · 獲贊 30 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章