还是搞不定,socket的问题,一解决就给分!
ysli 2001-09-18 06:00:25 下面的程序为服务端,试图从客户端接收一个长度为8192的流式包,可为什么只能接受到1460呢(客户端没问题,发出8192)??不是说流式数据不受大小限制么?(见http://www.csdn.net/expert/topicview1.asp?id=275250)
请各位出手,谢谢!!
#include <sys/types.h>
#include <sys/mntent.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define USERPORT 10002 /*port number*/
main(int argc,char **argv)
{
char buf_in[8192]; /*may be a SQL from client*/
char buf_out[8192]; /*may be a result to clinet*/
struct sockaddr_in client;
struct sockaddr_in server;
int s;
int ns;
int namelen;
int pktlen;
if((s=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("Socket()");
return;
}
/* first step:socket*/
bzero((char *)&server,sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(USERPORT);
server.sin_addr.s_addr = INADDR_ANY;
if (bind(s, (struct sockaddr *)&server, sizeof(server))<0)
{
perror("Bind()");
return;
}
/*sencond step:bind*/
for(;;)
{
if (listen(s,1)!=0) /*only one client and standing listen*/
{
perror("Listen()");
return;
}
/*third step:listen*/
namelen = sizeof(client);
if ((ns = accept(s, (struct sockaddr *)&client, &namelen)) ==-1)
{
perror("Accept()");
return;
}
/*fourth step:accept*/
if ((pktlen = recv(ns,buf_in,8192,0))<0)
{
perror("Recv()");
break;
}
else
if (pktlen == 0)
{
printf("Recv():return FAILED,connection is shut down!\n");
break;
}
else
printf("Recv():return SUCCESS,packet length = %d\n",pktlen);
printf("buf_in is :%s\n",&buf_in);
/*fifth step:recv*/
/*sleep(1); */
if (send(ns,buf_out,pktlen,0)<0)
{
perror("Send()");
break;
}
else
printf("Send():return SUCCESS,packet length = %d\n",pktlen);
/*sixth step:send*/
}
close(ns);
close(s);
}