SamstagBaron 的学生作业:
client
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc,char* argv[]){
int sockfd;
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1){
perror("error for socket");
return -1;
}
struct sockaddr_in addr;
bzero(&addr,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(atoi(argv[2]));
addr.sin_addr.s_addr = inet_addr(argv[1]);
int res = connect(sockfd,(const struct sockaddr* )&addr,sizeof(addr));
if(res==-1){
perror("error for connect");
return -1;
}
ssize_t rbytes=0,sbytes = 0;
char buffer[] = {"hello server"};
char* pbuffer = (char*)malloc(strlen(buffer)+5);
int length = strlen(buffer)+1;
memcpy(pbuffer,&length,4);
memcpy(pbuffer+4,buffer,strlen(buffer)+1);
printf("%d %s\n",*(int*)pbuffer,pbuffer+4);
while(1){
sbytes = send(sockfd,pbuffer,length+4,0);
}
free(pbuffer);
close(sockfd);
return 0;
}
server
#include
#include
#include
#include
#include
#include
#include
#include
const int BLOCKSOCK = 100;
int main(int argc,char* argv[]){
if(argc!=3){
perror("input invalid");
return -1;
}
int sockfd;
ssize_t rbytes = 0,sbytes = 0;
char buffer[1024] = {0};
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1){
perror("error for socket");
return -1;
}
struct sockaddr_in addr;
bzero(&addr,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(atoi(argv[2]));
addr.sin_addr.s_addr = inet_addr(argv[1]);
int res = bind(sockfd,(const struct sockaddr*)&addr,sizeof(addr));
if(res==-1){
perror("error for bind");
return -1;
}
res = listen(sockfd,BLOCKSOCK);
if(res==-1){
perror("error for listen");
return -1;
}
struct sockaddr_in client;
bzero(&client,sizeof(client));
socklen_t len = sizeof(client);
int sockfdc = accept(sockfd,(struct sockaddr*)&client,&len);
if(sockfdc==-1){
perror("error for accept");
return -1;
}
while(1){
int length = 0;
rbytes = recv(sockfdc,&length,4,0);
int received = 0;
while(received!=length){
rbytes = recv(sockfdc,buffer+received,length-received,0);
received+=rbytes;
}
printf("receive %s \n",buffer);
sleep(1);
}
close(sockfdc);
close(sockfd);
return 0;
}
【图片】