#include #include #include #include #include /* htohs */ #include /* htohs */ #include /* read , sleep */ #include #include #include /* memset */ #define PORT 8888 void *thr_main(); int value; int main(int argc, char *argv[]){ pthread_t thrID; int s, sock, size, one=1; char data[8]; struct sockaddr_in my_addr; if( (s = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) perror("socket"); setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)); memset(&my_addr, 0, sizeof(struct sockaddr_in)); my_addr.sin_addr.s_addr = htons(INADDR_ANY); my_addr.sin_family = AF_INET; my_addr.sin_port = htons(PORT); if( bind(s, (struct sockaddr *)&my_addr, sizeof(my_addr)) <0 ) perror("bind"); if( listen(s, 2) < 0 ) perror("listen"); pthread_create(&thrID, NULL, thr_main, NULL); if( (sock = accept(s, NULL, NULL)) < 0 ) perror("accept"); size = read(sock, data, 24); data[size] = '\0'; printf("data: %s",data); fflush(stdout); return(0); } void *thr_main(int *arg){ int sock; struct hostent *hstr; struct sockaddr_in sad; sleep(1); sock = socket(AF_INET, SOCK_STREAM, 0); if( (hstr = gethostbyname("ren.eecis.udel.edu")) == NULL ) perror("gethostbyname"); memcpy((char *)&(sad.sin_addr.s_addr), hstr->h_addr, hstr->h_length); sad.sin_family = AF_INET; sad.sin_port = htons(PORT); if( connect(sock, (const struct sockaddr *)&sad, sizeof(sad)) < 0 ) perror("connect"); write(sock, "Hello server\n", strlen("Hello server\n")); close(sock); }