C语言实现A和B的相互交流
以下两个文件编译后分别在服务器上同时执行
在服务器上分别监听端口2000和3000,分别用作A和B的信息接收和发送
A:
#include#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include char text[100][100]; int truindex[100] = {0}; int myindex = 0; int i = 0; void *client_one() { int port = 20000; int inet_sock; struct ifreq ifr; char ip[32] = {NULL}; inet_sock = socket(AF_INET,SOCK_DGRAM,0); strcpy(ifr.ifr_name,"eth0"); ioctl(inet_sock,SIOCGIFADDR,&ifr); strcpy(ip , inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr)); int sockfd = socket(AF_INET,SOCK_STREAM,0); struct sockaddr_in ser,cli; memset(&ser,0,sizeof(ser)); ser.sin_family = AF_INET; ser.sin_port = htons(port); ser.sin_addr.s_addr = inet_addr(ip); if(connect(sockfd,(struct sockaddr*)&ser,sizeof(ser))<0){ perror("connect server fail"); return -1; } while(1) { char buf[1024] = {NULL}; //printf("please cin:n"); scanf("%s",&buf); if(send(sockfd,buf,strlen(buf),0)) { printf("send successn"); } strcpy(&text[myindex],&buf); truindex[myindex] = 1; myindex++; system("clear"); for(i=0 ; i if(truindex[i] == 2) printf(" %sn",text[i]); else printf("%sn",text[i]); } } close(sockfd); } void* server_two() { int port = 30000; int server_sock = socket(AF_INET,SOCK_STREAM,0); struct sockaddr_in server_sockaddr; server_sockaddr.sin_family = AF_INET; server_sockaddr.sin_port = htons(port); server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY); int len = 0; if(bind(server_sock,(struct sockaddr *)&server_sockaddr,sizeof(server_sockaddr))==-1) { printf("bind"); return 1; } if(listen(server_sock, 6) == -1) { printf("listen"); return 1; } char buffer[8192]; struct sockaddr_in client_addr; socklen_t length = sizeof(client_addr); int clientfd = -1; printf("connet waitn"); clientfd = accept(server_sock, (struct sockaddr*)&client_addr,&length); printf("connet seccessn"); while(1) { memset(buffer, 0 ,sizeof(buffer)); len = recv(clientfd, buffer,sizeof(buffer),0); printf(" %sn",buffer); strcpy(&text[i],&buffer); truindex[myindex] = 2; myindex++; } } int main() { int i =0; pthread_t test_a; pthread_t test_b; pthread_create(&test_a,NULL,server_two,NULL); sleep(10); pthread_create(&test_b,NULL,client_one,NULL); sleep(10000); }
B:
#include#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include char text[100][100]; int truindex[100] = {0}; int myindex = 0; int i = 0; void* server_one() { int port = 20000; int server_sock = socket(AF_INET,SOCK_STREAM,0); struct sockaddr_in server_sockaddr; server_sockaddr.sin_family = AF_INET; server_sockaddr.sin_port = htons(port); server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY); int len = 0; if(bind(server_sock,(struct sockaddr *)&server_sockaddr,sizeof(server_sockaddr))==-1) { printf("bind"); return 1; } if(listen(server_sock, 6) == -1) { printf("listen"); return 1; } char buffer[8192]; struct sockaddr_in client_addr; socklen_t length = sizeof(client_addr); int clientfd = -1; printf("connet waitn"); clientfd = accept(server_sock, (struct sockaddr*)&client_addr,&length); printf("connet seccessn"); while(1) { memset(buffer, 0 ,sizeof(buffer)); len = recv(clientfd, buffer,sizeof(buffer),0); printf(" %sn",buffer); strcpy(&text[myindex],&buffer); truindex[myindex] = 2; myindex++; } } void *client_two() { int port = 30000; int inet_sock; struct ifreq ifr; char ip[32] = {NULL}; inet_sock = socket(AF_INET,SOCK_DGRAM,0); strcpy(ifr.ifr_name,"eth0"); ioctl(inet_sock,SIOCGIFADDR,&ifr); strcpy(ip , inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr)); int sockfd = socket(AF_INET,SOCK_STREAM,0); struct sockaddr_in ser,cli; memset(&ser,0,sizeof(ser)); ser.sin_family = AF_INET; ser.sin_port = htons(port); ser.sin_addr.s_addr = inet_addr(ip); if(connect(sockfd,(struct sockaddr*)&ser,sizeof(ser))<0){ perror("connect server fail"); return -1; } while(1) { char buf[1024] = {NULL}; //printf("please cin:n"); scanf("%s",&buf); if(send(sockfd,buf,strlen(buf),0)) { printf("send successn"); } strcpy(&text[myindex],&buf); truindex[myindex] = 1; myindex++; system("clear"); for(i=0 ; i if(truindex[i] == 2) printf(" %sn",text[i]); else printf("%sn",text[i]); } } close(sockfd); } int main() { pthread_t test_a; pthread_t test_b; pthread_create(&test_a,NULL,server_one,NULL); sleep(10); pthread_create(&test_b,NULL,client_two,NULL); sleep(10000); }
执行效果:



