关于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};
sockfd = socket(AF_INET,SOCK_STREAM,0);
sock.sin_family = AF_INET;
sock.sin_port = htons(23232);
sock.sin_addr.s_addr = inet_addr("192.168.10.131");
n = connect(sockfd,(struct sockaddr *)&sock,sizeof(struct sockaddr));
if(n == 0)
printf("seccess!\n");
else
printf("--!\n");
#if 0
rst = recv(sockfd,b,100,0);
if(rst>0)
write(1,b,rst);
#endif
while((len = read(0,a,100))>0)
{
rst = send(sockfd,a,len,0);
if(rst != len)
{
printf("erro!");
break;
}
memset(b,0,100);
rst = recv(sockfd,b,100,0);
printf("%s\n",strerror(errno));
if(rst>0)
{
printf("%s",b);
//write(1,b,rst);
}
else
{
printf("erro!");
break;
}
}
return 0;
} 网络编程 返回内容无法输出
[解决办法]
char hello[MAX] = "啊哟,你竟然连进来了,不容易啊^^!\n";
len = sizeof(hello);//这里是1024,而客户端每次只读了100
send(sock,hello,len,0);
[解决办法]
char hello[MAX] = "啊哟,你竟然连进来了,不容易啊^^!\n";
len = sizeof(hello);//这里是1024,而客户端每次只读了100
send(sock,hello,len,0);