欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入
/********************socket()*********************/
s= socket(AF_INET,SOCK_STREAM,0);
if(s<0)
{
printf(”client : create socket error\n”);
return 1;
}
printf(”client : socket fd = %d\n”, s);
//信号处理函数 SIGINT 是当用户按一个 Ctrl-C 建时发送的信号
ret = signal(SIGTSTP,sig_pipe);
if(SIG_ERR == ret)
{
printf(”信号挂接失败\n”);
return -1;
}
else
printf(”信号挂接成功\n”) ;
/*******************connect()*********************/
//设置服务器地址结构,准备连接到服务器
memset(&server_addr,0,sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
/*将用户数入对额字符串类型的IP格式转化为整型数据*/
//inet_pton(AF_INET,argv[1],&server_addr.sin_addr.s_addr);
printf(”please input server ip address : \n”);
read(0,server_ip,50);
//err = inet_pton(AF_INET,server_ip,&server_addr.sin_addr.s_addr);
server_addr.sin_addr.s_addr = inet_addr(server_ip);
err = connect(s,(struct sockaddr *)&server_addr,sizeof(sockaddr));
if(err == 0)
{
printf(”client : connect to server\n”);
}
else
{
printf(”client : connect error\n”);
return -1;
}
//与服务器端进行通信
process_conn_client(s);
close(s);
}
void process_conn_client(int s)
{
ssize_t size = 0;
char buffer[Buflen];
for(;;)
{
memset(buffer,’\0′,Buflen);
/*从标准输入中读取数据放到缓冲区buffer中*/
size = read(0,buffer,Buflen); // 0,被默认的分配到标准输入 1,标准输出 2,error
if(size > 0)
{
//当向服务器发送 “quit” 命令时,服务器首先断开连接
write(s,buffer,strlen(buffer)+1); //向服务器端写
//等待读取到数据
for(size = 0 ; size == 0 ; size = read(s,buffer,Buflen) );
write(1,buffer,strlen(buffer)+1); //向标准输出写
}
}
}
void sig_pipe(int signo) //传入套接字描述符
{
printf(”Catch a signal\n”);
if(signo == SIGTSTP)
{
printf(”接收到 SIGTSTP 信号\n”);
int ret = close(s);
if(ret == 0)
printf(”成功 : 关闭套接字\n”);
else if(ret ==-1 )
printf(”失败 : 未关闭套接字\n”);
exit(1);
}
}
[1][2][3]
还有不愿面对失败的尴尬。曾经怀有远大理想,拥有完美的憧憬。