#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<netdb.h>voiddostuff(int);/* function prototype */voiderror(constchar*msg){perror(msg);exit(0);}intmain(int argc,char*argv[]){int sockfd, portno, n, newsockfd, pid, time;structsockaddr_in serv_addr;structhostent*server;char buffer[256], buffer2[256];if(argc <3){fprintf(stderr,"usage %s hostname port\n", argv[0]);exit(0);}
portno =atoi(argv[2]);//create a socket
sockfd =socket(AF_INET, SOCK_STREAM,0);if(sockfd <0)error("ERROR opening socket");
server =gethostbyname(argv[1]);if(server ==NULL){fprintf(stderr,"ERROR, no such host\n");exit(0);}bzero((char*)&serv_addr,sizeof(serv_addr));
serv_addr.sin_family = AF_INET;bcopy((char*)server->h_addr,(char*)&serv_addr.sin_addr.s_addr,
server->h_length);
serv_addr.sin_port =htons(portno);//connectif(connect(sockfd,(structsockaddr*)&serv_addr,sizeof(serv_addr))<0){error("ERROR connecting");}printf("Connect success: ");bzero(buffer,256);bzero(buffer2,256);while(1){
n =read(sockfd, buffer,sizeof(buf));//从客户端读数据if(n ==-1){printf("read failed\n");exit(1);}write(STDOUT_FILENO, buf, n);//将数据打印到终端}close(sockfd);return0;/* we never get here */// bzero(buffer,256);// fgets(buffer,255,stdin);//write and read data// n = write(sockfd,buffer,strlen(buffer));// if (n < 0) // error("ERROR writing to socket");// bzero(buffer,256);// bzero(buffer2,256);//n = read(sockfd,buffer,255);// if (n < 0) // error("ERROR reading from socket");// printf("%s\n",buffer);// while (1) {// bzero(buffer,256);// pid = fork();// if (pid < 0)// error("ERROR on fork");// if (pid == 0) {// //close(sockfd);// dostuff(newsockfd);// exit(0);// }// else close(newsockfd);// } /* end of while */// close(sockfd);// return 0; /* we never get here */// }/******** DOSTUFF() *********************
There is a separate instance of this function
for each connection. It handles all communication
once a connnection has been established.
*****************************************/voiddostuff(int sock){int n;char buffer[256];bzero(buffer,256);
n =read(sock,buffer,255);if(n <0)error("ERROR reading from socket");printf("Here is the message: %s\n",buffer);
n =write(sock,"I got your message",18);if(n <0)error("ERROR writing to socket");}}