类比标识
*/
char input_buf[ BUF_SIZE ]; //定义字符串存放输入信息
char recv_buf[ BUF_SIZE ]; //定义字符串存放服务器端返回信息
memset(input_buf, 0, sizeof(input_buf));
memset(recv_buf, 0, sizeof(recv_buf));
fgets( input_buf, BUF_SIZE, stdin ); //获取用户输入
input_buf[strlen(input_buf) - 1] = '\0'; //去除最后一个输入的确认
/* 向服务器发送消息 */
if ( send(connfd, input_buf, BUF_SIZE, 0) < 0 )
printf( "send failed" );
/* 从服务器接受消息 */
if ( recv(connfd, recv_buf, BUF_SIZE, 0) < 0 )
printf( "recv failed" );
/* 用户名处理 */
if ( flag == 'u' ) {
if ( strcmp(recv_buf, error_user) == 0 ) { //用户名错误
puts( error_user );
return FALSE;
}
}
/* 密码处理 */
else if ( flag == 'p' ) {
if ( strcmp(recv_buf, error_password) == 0 )
{ puts( error_password ); //密码错误
return FALSE;
}
}
/* 命令处理 */
else if( flag == 'c' )
{
if ( strcmp(recv_buf, exit_command) == 0 ) { //退出
printf("连接已断开\n");
return FALSE;
}
puts(recv_buf); //命令结果输出
}
return TRUE;
}
int main( int argc, char *argv[] )
{
int connfd;
int serv_port;
char recv_buf[ BUF_SIZE ];
struct sockaddr_in serv_addr;
if ( argc != 3 ) {
printf( "输入格式为: ./c [ip] [port]\n" );
exit ( 1 );
}
memset( &serv_addr, 0, sizeof(struct sockaddr_in) );//置零
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons( atoi(argv[2]) );
inet_aton( argv[1], &serv_addr.sin_addr );
if ( serv_addr.sin_port == 0 ||serv_addr.sin_addr.s_addr == 0 ) {
fprintf( stderr, "输入格式为: ./c [ip] [port]\n" );
exit ( 1 );
}
connfd = socket( AF_INET, SOCK_STREAM, 0 ); //创建socket
if ( connfd < 0 )
printf( "socket failed" );
if ( connect(connfd, (struct sockaddr *)&serv_addr,sizeof(struct sockaddr)) < 0 ) //连接服务器
{
printf( "connect failed" );
exit(0);
}
printf("请输入用户名:");
/*输入操作*/
if ( send_recv( connfd, 'u' ) == TRUE )
{
printf("请输入密码:");
if ( send_recv( connfd,'p' )== TRUE )
{
while(1)
{
printf("guest@ubantu:");
if ( send_recv( connfd, 'c' )== FALSE )
{
close( connfd );
exit(0);
}
}
}
}
close( connfd );
return 0;
}
|