#define MAXSIZE 1024*1024
#define PORT 6868
void *pread(void* arg)
{int sock_fd = *(int *)arg;
char buf[MAXSIZE];
int ret;
int fd;
fd=open("log",O_WRONLY|O_CREAT|O_APPEND, 0666);
while(1)
{
bzero(buf,sizeof(buf));
ret=read(sock_fd, buf, MAXSIZE);
if (ret <= 0)break;
printf ("%s", buf);
write(fd,buf,strlen(buf));
}
close(fd);
printf("SERVER DOWN!!!\n");
pthread_exit(NULL);
}
void *pwrite(void* arg)
{int sock_fd = *(int *)arg;
char str[MAXSIZE]="";
while(fgets(str,MAXSIZE,stdin))
{
if(0 == strcmp(str , "-help\n"))
{printf(" default: send message to commen.\n");
printf(" -show: show all online user.\n");
printf(" -quit: jump out.\n");
printf(" 遘∬♀ \n");
printf(" /(username online):(message)\n");
continue;
}
if(0 == strcmp(str,"-quit\n")){
exit(0);
}
write(sock_fd, str, strlen(str)+1);
}
return NULL;
}
int main(int argc, char *argv[])
{int sock_fd = 0;
struct sockaddr_in pin;
pthread_t tid1;
pthread_t tid2;
char mode[10]="";
char name[20]="";
char passwd[20]="";
char message[MAXSIZE]="";
char ret[1];
if(argc != 2)
{printf("./client (serviceIP)\n");
return 1;
}
bzero(&pin,sizeof(pin));
pin.sin_family = AF_INET;
inet_pton(AF_INET, argv[1], &pin.sin_addr);
pin.sin_port = htons(PORT);
sock_fd = socket(AF_INET, SOCK_STREAM, 0);
if( 0 > connect (sock_fd, (void *)&pin, sizeof(pin)))
{perror("connect");
return 1;}
printf("CONNET SUCCESS!\n");
while(1)
{
bzero(message,sizeof(message));
bzero(name,sizeof(name));
bzero(passwd,sizeof(passwd));
bzero(mode,sizeof(mode));
printf("Please choose (l)ogin/(r)egist/(e)xit:\n");
if (!fgets(mode,sizeof(mode),stdin))break;
if('e' == mode[0])
return 0;
if('l' != mode[0]&& 'r' != mode[0])
continue;
printf("Please input username:\n");
if (!fgets(name,sizeof(name),stdin))break;
if(1 >= strlen(name))
continue;
*strchr(name,'\n') ='\0';//set the end
printf("Please input passwd:\n");
if (!fgets(passwd,sizeof(passwd),stdin))break;
if(1 >= strlen(passwd))
continue;
strchr(passwd,'\n') ='\0';
sprintf(message,"%c%s:%s",mode[0],name,passwd);
write(sock_fd,message,strlen(message)+1);
if(0 >= read(sock_fd,ret,1)){
printf ("SERVER CLOSE!!\n");
return 1;
}
if('r' == ret[0]){
printf("regist success !\n");
continue;
}
else if('c' == ret[0]){
printf("regist error!exist user name!\n");
continue;
}
else if('l' == ret[0])
{
printf("login success !\n");
printf(" try '-help' to see helpinfo.\n");
break;
}
else if('u' == ret[0])
{
printf("username not exist!\n");
continue;
}
else if('p' == ret[0]){
printf("passwd error!\n");
continue;
}
else if('o' == ret[0])
{
printf("user online!\n");
continue;
}
}
pthread_create(&tid1, NULL,pread, (void*)&sock_fd);
pthread_create(&tid2, NULL,pwrite,(void*)&sock_fd);
pthread_join(tid1, NULL);
pthread_cancel(tid2);
close(sock_fd);
return 0;
}
恩 代码确实没问题的 文件的后缀也是cpp 可以正常运行,可是老师偏要改写成C++代码。。。。郁闷 你能不能改写下呢,用到类 谢谢~
追答把printf(“XXXXX”);
改成cout << XXXXXX;
额。。必须得用到C++中的类 等等的一些知识,具有C++的特性才行。。
追答这个类……比较复杂,让我想一段时间
本回答被网友采纳