C++ TCP 为什么发送的数据和键盘输入的有出入? 代码
include....
include....
void * for_clicent(void *data)
{
int retval,len, maxfd = -1 ,MAXBUF=1024;
fd_set rfds;//定义集合
int new_server_socket = (int)data;
struct timeval tv;
char sendbuf[MAXBUF];
char revbuf[MAXBUF];
bzero(sendbuf, MAXBUF + 1);
fgets(sendbuf,MAXBUF, stdin);
while(1)
{
/* 把集合清空 */
FD_ZERO(&rfds);
/* 把标准输入句柄0加入到集合中 */
FD_SET(0, &rfds);
maxfd = 0;
/* 把当前连接句柄new_fd加入到集合中 */
FD_SET(new_server_socket, &rfds);
if (new_server_socket> maxfd)
maxfd = new_server_socket;
/* 设置最大等待时间 */
tv.tv_sec = 1;
tv.tv_usec = 0;
/* 开始等待 */
retval = select(maxfd + 1, &rfds, NULL, NULL, &tv);
if (retval == -1)
{
printf("将退出,select出错! %s", strerror(errno));
break;
}
else
if (retval == 0)
{
/* printf
("没有任何消息到来,用户也没有按键,继续等待……\n"); */
continue;
}
else
{
if (FD_ISSET(0, &rfds))
{
/* 用户按键了,则读取用户输入的内容发送出去 */
bzero(sendbuf, MAXBUF);
fgets(sendbuf, MAXBUF, stdin);
if (!strncasecmp(sendbuf, "quit", 4))
{
printf("自己请求终止聊天!\n");
break;
}
}
len = send(new_server_socket,sendbuf,strlen(sendbuf)-1,0);
if(len>0)
{
printf("发送消息成功:'%s',共%d个字节的数据\n",sendbuf, len);
//bzero(sendbuf, MAXBUF + 1);
}
else
{
break;
}
}
while (FD_ISSET(new_server_socket, &rfds))
{
bzero(revbuf, MAXBUF + 1);
len = recv(new_server_socket,revbuf, MAXBUF, 0);
if(len>0)
{
printf("接收消息成功:'%s',共%d个字节的数据\n",revbuf, len);
//bzero(revbuf, MAXBUF + 1);
}
}
}
close(new_server_socket);
}
void hk_socket()
{
socklen_t len_str;
// pthread_t child_thread;//定义子线程
int server_socket,connect_socket;
int listen_port=7878;
int len;
int MAXBUF =1024;
char buf[MAXBUF + 1];
struct sockaddr_in server_Addr;
struct sockaddr_in clicent_Addr;
//结构体定义
if((server_socket=socket(PF_INET,SOCK_STREAM,0))==-1)//建立套接口
{
printf("bad socket\n");
exit(1);
}
bzero(&server_Addr,sizeof(server_Addr));
server_Addr.sin_family=PF_INET;
server_Addr.sin_port=htons(listen_port);
server_Addr.sin_addr.s_addr = INADDR_ANY;
if(bind(server_socket,(struct sockaddr *) &server_Addr,sizeof(struct sockaddr))==-1)//绑定地址和端口
{
printf("bad bind\n");
exit(1);
}
if(listen(server_socket,5)==-1)//开始监听;
{
printf("listen error");
}
else
{
printf("HK start listen.......\n");
}
while(1)
{
len_str=sizeof(struct sockaddr_in);
connect_socket=accept(server_socket,(struct sockaddr *)&clicent_Addr,&len_str);
if(connect_socket==-1)
{
printf("connect error\n");
}
else
{
pthread_t child_thread;//定义
int thread_id;
thread_id=pthread_self();
pthread_attr_t child_thread_attr;
pthread_attr_init(&child_thread_attr);
pthread_attr_setdetachstate(&child_thread_attr,PTHREAD_CREATE_DETACHED);
if(thread_id=pthread_create(&child_thread,&child_thread_attr,for_clicent,(void *)connect_socket)!=0)
{
printf("pthread_create Failed : %s\n",strerror(errno));
}
printf("server: got connection from %s, port %d, socket %d,thread %d\n", inet_ntoa(clicent_Addr.sin_addr),ntohs(clicent_Addr.sin_port),connect_socket,pthread_self());
// sleep(5);
}
}
}
如键盘输入12345 ,到sendbuf里面的就只有 345,客户端接受当然也只有345了。。。怎么回事呢?