#include "def" int main(int argc, char **argv) { int sockfd, n; int len; char recvline[1024]; char buff[1024]; struct sockaddr_in servaddr, cliaddr; if (argc != 3) { printf("usage: %s \n", argv[0]); exit(-1); } if ( (sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP)) < 0){ perror("socket error"); exit(-1); } bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; if ( inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0) { perror("inet_pton error for"); exit(-1); } servaddr.sin_port = htons(atoi(argv[2])); /* daytime server */ 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_INET, &cliaddr.sin_addr, buff, sizeof(buff)), ntohs(cliaddr.sin_port)); len = sizeof(cliaddr); getpeername(sockfd, (SA *) &cliaddr, &len); printf("my peer: %s, port %d\n", inet_ntop(AF_INET, &cliaddr.sin_addr, buff, sizeof(buff)), ntohs(cliaddr.sin_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); }