为了账号安全,请及时绑定邮箱和手机立即绑定

作业社区

探索学习新天地,共享知识资源!

0 提交作业
0 布置作业
0 满分作业
得分 100
学习任务

SamstagBaron 的学生作业:

#include #include #include #include #include #include #include #include"tcptool.h" const int BLOCKSOCK = 100; int createTcpServer(const char* ip,short port){ 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(port); addr.sin_addr.s_addr = inet_addr(ip); 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; } return sockfd; } int connectToServer(const char* ip,short port){ 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(port); addr.sin_addr.s_addr = inet_addr(ip); int res = connect(sockfd,(const struct sockaddr*)&addr,sizeof(addr)); if(res==-1){ perror("error for connet"); return -1; } return sockfd; } int listenToClient(int sockfd, struct sockaddr_in* addr){ int cfd; socklen_t len = sizeof(struct sockaddr); cfd = accept(sockfd,(struct sockaddr*) addr,&len); if(cfd==-1){ perror("error for accept"); return -1; } return cfd; } void show_accepted_client(struct sockaddr_in* addr){ printf("Ip: %s \n",inet_ntoa(addr->sin_addr)); printf("Port: %d \n",ntohs(addr->sin_port)); } ssize_t sendTcp(int sockfd,const void *buf,size_t len){ return send(sockfd,buf,len,0); } ssize_t recvTcp(int sockfd, void *buf,size_t len ){ return recv(sockfd,buf,len,0); }

得分 100
学习任务

SamstagBaron 的学生作业:

#include #include #include #include #include #include #include #include"tcptool.h" const int BLOCKSOCK = 100; int createTcpServer(const char* ip,short port){ 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(port); addr.sin_addr.s_addr = inet_addr(ip); 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; } return sockfd; } int connectToServer(const char* ip,short port){ 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(port); addr.sin_addr.s_addr = inet_addr(ip); int res = connect(sockfd,(const struct sockaddr*)&addr,sizeof(addr)); if(res==-1){ perror("error for connet"); return -1; } return sockfd; } int listenToClient(int sockfd, struct sockaddr_in* addr){ int cfd; socklen_t len = sizeof(struct sockaddr); cfd = accept(sockfd,(struct sockaddr*) addr,&len); if(cfd==-1){ perror("error for accept"); return -1; } return cfd; }

得分 100
学习任务

SamstagBaron 的学生作业:

#include #include #include #include #include #include #include #include #include #include void* thread_handle(void* arg){ int sockfd = *(int*)arg; char buffer[100] = {0}; ssize_t rbytes = 0; ssize_t sbytes = 0; while(1){ rbytes = recv(sockfd,buffer,sizeof(buffer),0); printf("receive %s",buffer); sbytes = send(sockfd,buffer,rbytes,0); if(strncmp(buffer,"quit",4)==0){ printf("quit client \n"); break; } memset(buffer,0,rbytes); } close(sockfd); } 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); pthread_t tid; while(1){ int sockfdc = accept(sockfd,(struct sockaddr*)&client,&len); if(sockfdc==-1){ perror("error for accept"); return -1; } pthread_create(&tid,NULL,thread_handle,(void*)&sockfdc); pthread_detach(tid); } close(sockfd); return 0; } 【图片】【图片】

得分 100
学习任务

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; } 【图片】

得分 100
学习任务

SamstagBaron 的学生作业:

TCP粘包是由于tcp算法将多个数据包打包发送并被一次性读取或者数据包被拆分后与其他的数据包打包发送导致 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"}; while(1){ sbytes = send(sockfd,buffer,strlen(buffer)+1,0); } 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){ rbytes = recv(sockfdc,buffer,sizeof(buffer),0); if(rbytes==0){ printf("quit\n"); break; } else if (rbytes>0){ printf("receive %s \n",buffer); if(strncmp(buffer,"quit",4)==0){ printf("quit\n"); break; } }else{ perror("error for recv"); return -1; } sleep(1); } close(sockfdc); close(sockfd); return 0; } 【图片】

微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号