基于unix平台的tcpip协议的通信程序设计内容摘要:

15 int new_fd,sockfd1。 struct sockaddr_in client_addr。 sockfd1=*((int *)fd)。 int sin_size=sizeof(struct sockaddr_in)。 //循环接收连接 while(1){ new_fd=my_accept(sockfd1,(struct sockaddr *)amp。 client_addr,amp。 sin_size)。 ARG *arg=(ARG*)malloc(sizeof(ARG))。 argattribute_fd=new_fd。 memcpy(amp。 argattribute_addr, amp。 client_addr, sin_size)。 i++。 //创建线程读写操作 createthread(amp。 thread[i], NULL, start_routine,(void*)arg)。 pthread_detach(thread[i])。 printf(you get a connection from:%s\n,i_ntoa())。 } } void* start_routine(void* arg) { int rc。 ARG newarg。 =((ARG *)arg)attribute_fd。 =((ARG *)arg)attribute_addr。 int nready。 //设置 select fd_set read,write。 FD_ZERO(amp。 read)。 FD_SET(,amp。 read)。 FD_ZERO(amp。 write)。 FD_SET(,amp。 write)。 //创建线程进行写文件 pthread_t thread1。 createthread(amp。 thread1, NULL, start_routine1,(void*)amp。 newarg)。 int recvvalue。 char datain[MAXDATASIZE]。 通信网络设计课程设计 题号: u1 设计日期 20200104 20200115 //写循环 while(1){ fd_set writeset,readset。 writeset=write。 readset=read。 nready=select(+1, amp。 readset, amp。 writeset, NULL,NULL)。 //接收字符或 stop命令 recvvalue=my_recv(, datain, MAXDATASIZE, 0)。 if (recvvalue==0) { close()。 pthread_cancel(thread1)。 break。 } else if (recvvalue0){ datain[recvvalue]=39。 \039。 printf((%s)say:%s\n,i_ntoa(),datain)。 if (strcmp(datain,stop)==0){ //shutdown(,0)。 //关闭接收 while(1){ if (FD_ISSET(,amp。 writeset)){ shutdown(,1)。 //关闭发送 pthread_cancel(thread1)。 break。 } else printf(waiting...you are writing...\n)。 } shutdown(,0)。 //关闭接收 break。 } } } pthread_join(thread1,NULL)。 free(arg)。 rc=pthread_mutex_lock(amp。 quitmutex)。 if (rc){ perror(mutex lock error\n)。 exit(1)。 } quit++。 rc=pthread_mutex_unlock(amp。 quitmutex)。 if (rc){ perror(mutex unlock error\n)。 exit(1)。 } pthread_exit(NULL)。 通信网络设计课程设计 题号: u1 设计日期 20200104 20200115 } void* start_routine1(void* newarg) { ARG arg。 =((ARG *)newarg)attribute_fd。 =((ARG *)newarg)attribute_addr。 fd_set write,read。 FD_ZERO(amp。 write)。 FD_SET(,amp。 write)。 FD_ZERO(amp。 read)。 FD_SET(,amp。 read)。 int nready。 char dataout[MAXDATASIZE]。 while(1) { fd_set readset,writeset。 readset=read。 writeset=write。 nready=select(+1, amp。 readset, amp。 writeset, NULL,NULL)。 if (nready==1){ perror(select error\n)。 exit(1)。 } //输入字符或 quit命令 scanf(%s,dataout)。 my_send(, dataout, strlen(dataout),0)。 if (strcmp(dataout,stop)==0){ //shutdown(,1)。 //关闭发送 while(1){ if (!FD_ISSET(,amp。 readset)){ shutdown(,0)。 break。 } else printf(waiting...you are reading...\n)。 } shutdown(,1)。 //关闭发送 break。 } } pthread_exit(NULL)。 }  通信网络设计课程设计 题号: u1 设计日期 20200104 20200115 include mon/ typedef struct arg_t { int attribute_fd。 struct sockaddr_in attribute_addr。 }ARG。 void* start_send(void* clientarg)。 void myread(int sockfd,struct in_addr addr,pthread_t thread)。 main(int argc, char *argv[]) { struct sockaddr_in serveraddr。 int clientfd。 struct hostent *change。 int sizelen。 if (argc!=2) { printf(Usage: ./fileclient serverName\n)。 exit(1)。 } printf(结束通信输入 stop.\n)。 printf(connecting......\n)。 //创建一个 socket clientfd=my_socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)。 //由主机名得到 struct hostent 结构 change=my_gethostbyname(argv[1])。 //连接服务器 sizelen=sizeof(struct soc。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。