实验一 SOCKET基本编程
参考源代码: 客户端程序如下: #include
#define MAXDATASIZE 100 int
main(int argc, char *argv[]) { int fd, numbytes;
char buf[MAXDATASIZE]; char rvbuf[MAXDATASIZE]; struct hostent *he; struct sockaddr_in server; if (argc != 2) { printf(\ exit(-1);
}
if ((he =gethostbyname(argv[1])) == NULL) { perror(\ exit(1);
}
if ((fd =socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror(\
exit(1);
1
}
bzero(&server,sizeof(server)); server.sin_family =AF_INET; server.sin_port=htons(PORT);
memcpy(&server.sin_addr,he->h_addr,sizeof(struct in_addr));
if (connect(fd, (struct sockaddr *)&server, sizeof(struct sockaddr)) == -1) { perror(\ exit(1);
}
struct sockaddr_in localaddr; socklen_t len = sizeof(localaddr);
getsockname(fd,(struct sockaddr *)&localaddr,&len); printf(\
Localip
and
is: %s:%d\\n\
struct sockaddr_in peeraddr; socklen_t lenp = sizeof(peeraddr);
getpeername(fd, (struct sockaddr *)&peeraddr,&lenp); printf(\
Peerip
and
is: %s:%d\\n\ close(fd);
}
服务器端程序如下: #include
Localport
Peerport
2
void process_cli(int connectfd,struct sockaddr_in client); int main(void) {
int listenfd, connectfd; struct sockaddr_in server, client; int sin_size;
if((listenfd=socket(AF_INET, SOCK_STREAM, 0))==-1) { perror(\
exit(-1);
}
int opt=SO_REUSEADDR;
setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)); bzero(&server,sizeof(server)); server.sin_family =AF_INET; server.sin_port =htons(PORT);
server.sin_addr.s_addr =htonl(INADDR_ANY);
if (bind(listenfd, (struct sockaddr*)&server, sizeof(struct sockaddr))== -1) { perror(\ exit(-1);
}
if (listen(listenfd, BACKLOG) == -1) { perror(\ exit(-1);
}
sin_size =sizeof(struct sockaddr_in); while(1) {
if ((connectfd =accept(listenfd, (struct sockaddr *)&client,&sin_size)) == -1)
3
{ perror(\
exit(-1);
} close(connectfd);
}
close(listenfd); }
4
实验二 服务器与单客户的连接处理
参考源代码: 客户端程序如下: #include
#define MAXDATASIZE 1000 int main(int argc,char * argv[]) {
int fd,numbytes;
char buf[MAXDATASIZE]; struct hostent * he; struct sockaddr_in server; int i=1; if(argc!=2) {
printf(\ \\n\ exit(-1); }
if((he=gethostbyname(argv[1]))==NULL){ perror(\
exit(-1);
}
if((fd=socket(AF_INET,SOCK_STREAM,0))==-1){ perror(\
exit(1);
}
bzero(&server,sizeof(server));
5