#include "def" int main(int argc, char **argv) { int sockfd, n; int len; char recvline[1024]; char buff[1024]; struct sockaddr_in6 servaddr, cliaddr; if (argc != 3) { perror("usage: a.out "); exit(-1); } if ( (sockfd = socket(AF_INET6, SOCK_STREAM, IPPROTO_SCTP)) < 0){ perror("socket error"); exit(-1); } bzero(&servaddr, sizeof(servaddr)); servaddr.sin6_family = AF_INET6 ; servaddr.sin6_port = htons(atoi(argv[1])); /* daytime server */ if ( inet_pton(AF_INET6, argv[1], &servaddr.sin6_addr) <= 0) { perror("inet_pton error for"); exit(-1); } if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0) { perror("connect error"); exit(-1); } write(sockfd,"HI",2); len = sizeof(cliaddr); getsockname(sockfd, (SA *) &cliaddr, &len); printf("my end: %s, port %d\n", inet_ntop(AF_INET6, &cliaddr.sin6_addr, buff, sizeof(buff)), ntohs(cliaddr.sin6_port)); /* write(sockfd,"HI",2); */ len = sizeof(cliaddr); getpeername(sockfd, (SA *) &cliaddr, &len); printf("my peer: %s, port %d\n", inet_ntop(AF_INET6, &cliaddr.sin6_addr, buff, sizeof(buff)), ntohs(cliaddr.sin6_port)); while ( (n = read(sockfd, recvline, 1024)) > 0) { recvline[n] = 0; /* null terminate */ if (fputs(recvline, stdout) == EOF) { perror("fputs error"); exit(-1); } } if (n < 0){ perror("read error"); exit(-1); } exit(0); }