📄 client.cpp
字号:
using namespace std;
#include <string.h>//pour memcpy au moins
#include <stdio.h>//perror
#include <sys/types.h>
//#include <iostream>
//#include <netinet/in.h>
//#include <netdb.h>
//#include <arpa/inet.h>
#include <sys/socket.h>
#include <fstream>
#include <pthread.h>
#include <poll.h>
#include <unistd.h>
#include "sock.h"
#include "sockdist.h"
#ifndef INFTIM
#define INFTIM -1
#endif
const int PORT = 8081;
const int MAX_CONNECT = 1000;
const int MAX_USER = MAX_CONNECT;
int sockfd;
struct User
{
char name[32];
int tcp_sock;
unsigned int tcp_addr;
unsigned short tcp_port;
};
main(int argc, char*argv[])
{
void *ReadMsg(void *);
pthread_t t_readMsg;
struct pollfd client[MAX_USER];
int nReady,i,maxPoll,msgSize;
int ret;
char userid[32];
char buffer[1024];
char number[100][4]={"0","1","2","3","4","5","6","7","8","9"};
char msg[512];
char dispMes[512];
//string dispMes; char name[32];
char choice;
const char sayAll[]=" Says to ALL:";
const char says[]= " Says:";
struct User user[MAX_USER];
socklen_t clilen;
struct sockaddr_in caddr,client_addr;
char serverIP[20];
string hostIP;
cout << "Please input the Host name:" <<endl;
cin >> serverIP;
SockDist distBr(serverIP,(short)PORT);
sockfd = socket(AF_INET,SOCK_STREAM,0);
sockaddr_in *sdistBr = distBr.getAdrDist();
ret = connect(sockfd,(struct sockaddr *) sdistBr, sizeof(struct sockaddr));
if (ret != 0)
{
cout << "Connect to Server Failed" <<endl;
exit(1);
}
cout << "Connect to Server Successful!" <<endl;
cout << "Login name: (lenght is limited in 30 letters)" <<endl;
cin >> name;
strcpy(userid,name);
pthread_create(&t_readMsg,NULL,ReadMsg,NULL);
sleep(1);
cout << "***************** Notice ***********************"<<endl;
cout << "\tType 3:Talk to All \n\tType 4:List All users \n\tType 9:Exit Chat!"<<endl;
cout << "***************** Notice ***********************"<<endl;
msg[0]= '1';
for (int m=0;m<32 ;m++ )
{
msg[m+1]=userid[m];
}
send(sockfd,msg,sizeof(msg),MSG_NOSIGNAL);
//cout << userid << endl;
while (1)
{ //char check[512]="/return"; sleep(1);
cout << "choice:3-Chat to all | 4-Exit | 5-list all users | '/return' - return to list:"<<endl;
cin >> &choice;
switch (choice)
{
case '3': cout << "Chat Input:"; while (strncmp(dispMes,"/return",8)) { bzero(&msg,sizeof(msg));
bzero(&dispMes,sizeof(dispMes)); msg[0]= '3'; cin >>dispMes; {
int m;
for (m=0;m<strlen(userid) ;m++ )
{
msg[m+1]=userid[m];
}
//strcat(msg," Says:");
for (int n=0;n<strlen(sayAll) ; n++)
{
msg[m+1]=sayAll[n];
m++;
}
for (int n=0;n<strlen(dispMes) ; n++)
{
msg[m+1]=dispMes[n];
m++;
}
//strcat(msg,dispMes);
}
send(sockfd,msg,sizeof(msg),MSG_NOSIGNAL); } bzero(&msg,sizeof(msg));
bzero(&dispMes,sizeof(dispMes));
break;
case '4':
close(sockfd);
return 1;
break;
case '5':
bzero(&msg,sizeof(msg));
msg[0]= '9';
send(sockfd,msg,sizeof(msg),MSG_NOSIGNAL);
break;
default:
cout <<"Input incorrect"<<endl;
break;
}
}
/* on peut commencer `a dialoguer, mais on attend que le <<serveur>> existe */
cout <<"ici client ; s'assurer que le serveur existe"<<endl;
cout <<"des qu'on veut continuer, return (entrée) svp"<<endl;
}//main
void *ReadMsg(void *)
{
char dispBuffer[1024];
while(1)
{
bzero(dispBuffer,sizeof(dispBuffer));
if(recv(sockfd,(void *)dispBuffer, sizeof(dispBuffer), 0) <= 0)
{
cout<< "Connetion Error"<<endl;
pthread_exit(0);
}
cout<<dispBuffer<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -