关于c网络编程的有关问题,很诡异的(小弟我们老师,工作十年的网络编程高手没解决^求大神)

关于c网络编程的问题,很诡异的(我们老师,工作十年的网络编程高手没解决^^,求大神)
希望大神可以解决一下,我学习网络编程过程中遇到的,本来是客户端发一条信息,服务端会把原话返回,很基础的东西,不过我在前面加了一句先从服务端向客户端发送一句话,结果问题出来了,每次由客户端输入都不返回,输好几次后会吧之前输入的全部返回,然后每输一句会显示上一句输入的内容


这个是服务器代码

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>

#define MAX 1024

void *ver(void *nsock);

int main(void)
{
int sock;
int len;
int srt;
int nsock;
int *psock;
int tmp = 1;
pthread_t id;
char a[MAX];
struct sockaddr_in s = {0};

sock = socket(AF_INET,SOCK_STREAM,0);
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&tmp,sizeof(tmp));
s.sin_family = AF_INET;
s.sin_port = htons(23232);
s.sin_addr.s_addr = inet_addr("192.168.10.131");
srt = bind(sock,(struct sockaddr *)&s,sizeof(struct sockaddr));
if(srt < 0)
return 1;
srt = listen(sock,5);
if(srt < 0)
return 2;
/*

*/
len = sizeof(s);
while(1)
{
nsock = accept(sock,(struct sockaddr *)&s,&len);
psock = malloc(sizeof(int));
*psock = nsock;
printf("%s:%d 已连接......\n",
inet_ntoa(s.sin_addr),
ntohs(s.sin_port));
pthread_create(&id,NULL,&ver,psock);
}

while((len = recv(nsock,a,MAX,0)) > 0)
{
write(1,a,len,0);
srt = send(nsock,a,len,0);
memset(a,0,MAX);
}
close(sock);
close(nsock);

}

void *ver(void *nsock)
{
int len;
int srt;
char a[MAX];
int sock = *((int *)nsock);
free(nsock);
char hello[MAX] = "啊哟,你竟然连进来了,不容易啊^^!\n";
len = sizeof(hello);
send(sock,hello,len,0);
while((len = recv(sock,a,MAX,0)) > 0)
{
write(1,a,len);
srt = send(sock,a,len,0);
if(srt < 0)
printf("erro");
memset(a,0,MAX);
}
close(sock);
}
这个是客户端代码
#include<stdio.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<string.h>

int main(void)
{
int n ;
int len;
int rst;
int sockfd;
char a[100];
char b[100] = {0};
struct sockaddr_in sock = {0};