- 论坛徽章:
- 0
|
我刚做一个与财政局通信的client端程序(简单测试),很奇怪每次只能从socket中读1460个字节,不知何解,望高手指点!
程序如下:
#define MAXDATASIZE 500
#define TCP_PORT 7000
#define TCP_ADDR 10.1.1.1
int connect_sev( int *rec_sockfd ) /*与服务器建立连接*/
{
int sockfd;
struct sockaddr_in server_add;
if ( (sockfd = socket( AF_INET, SOCK_STREAM, 0 ) ) < 0 ){
return -1;
}
server_add.sin_family = AF_INET;
server_add.sin_port = htons( TCP_PORT );
server_add.sin_addr.s_addr = inet_addr( TCP_ADDR ) ;
if ( connect( sockfd, ( struct sockaddr * ) & server_add, sizeof(struct sockaddr ) )<0 )
{
return -1;
}
* rec_sockfd = sockfd ;
return 0;
}
/* client端 */
int main( )
{
char send_buff[1024];
char recv_buff[1024];
int sockfd;
int rec;
long number;
char filename[201];
FILE *fp;
rec=0;
memset( send_buff, 0x00, sizeof(send_buff) );
memset( recv_buff, 0x00, sizeof(recv_buff) );
memset( filename, 0x00, sizeof(filename) );
sprintf(filename,"%s/test.txt",getenv("TMPDIR" );
rec = connect_sev( &sockfd );
if( rec ) {
return -1;
}
if(!( fp = fopen( filename,"w" )) {
close( sockfd );
return -1;
}
strcpy( send_buff, "1011" ); /*发送命令指令*/
number = send( sockfd, send_buff, strlen(send_buff), 0 );
if (number < 0) {
close( sockfd );
fclose( fp );
return -1;
}
while (1) {
memset( recv_buff, 0x00, sizeof(recv_buff) );
number = recv( sockfd, recv_buff,MAXDATASIZE, 0 );
recv_buff[number] = '\0';
if (number == 0)
break;
fprintf( fp, recv_buff );
if (number < MAXDATASIZE)
break;
}
close( sockfd );
fclose( fp );
return 0;
}
分析:
1。可能是服务器方程序有问题(可惜已经下班),估计可能性不大,因为还有其他单位测试,没有这种反映。
2。connect()、socket()、send()、recv()等函数会不会有些参数不正确?
望各位大侠指点! |
|