|
|
第一个socket连接没问题
第二个socket连接一连就卡死了(在connect()调用时卡住)
我第二个连接换个端口号就不会卡死,要么报连接不上
就是这个端口会卡死
为什么?怎么解决?
关键是怎么解决,请尽量详细!!
#include<stdio.h>
#include <stdlib.h>
#include<winsock2.h>
#include<string.h>
#include<conio.h>
#pragma comment(lib,"ws2_32.lib")
FILE *fp;
SOCKET client,upload;
WSADATA WSAData;
int WSAreturn;
int portnum;
char *sportnum;
struct hostent *hp;
char information[256];
char receive[256];
char username[32],password[32],cmd[128];
char servername[256];
char message[10000];
long result;
int xferData();
int RecvMessage(SOCKET *s)
{
recv(*s,message,sizeof(message),0);
printf("*******接收到的消息*******\n");
printf("%s\n",message);
return(0);
}
int connection(SOCKET *s,char* name,int port)
{
sockaddr_in to;
WSAreturn = WSAStartup(0x101,&WSAData);
if(WSAreturn)
{
printf("发生一个未知错误!\n");
return 0;
}
*s = socket(PF_INET,SOCK_STREAM,0);
to.sin_family = AF_INET;
// to.sin_addr.s_addr = inet_addr(name);
if(hp = gethostbyname(name))
{
memcpy((char*)&to.sin_addr,hp->h_addr,hp->h_length);
}
else
{
printf("host unknown!");
return(-1);
}
to.sin_port = htons(port);
printf("正在连接...\n");
result = connect(*s,(struct sockaddr *)&to,sizeof(to)); //第二个连接卡在这
if(SOCKET_ERROR==result)
{
// 连接失败
printf("对不起,无法连接到目标主机!\n");
WSACleanup();
return -1;
}
else
{
recv(*s,receive,sizeof(receive),0);
printf("*******欢迎消息消息*******\n");
printf("%s\n",receive);
printf("***********结束*********\n");
}
return (0);
}
int xferData()
{
char *temp1, *temp2;
strcpy(username,"sybase");
strcpy(cmd,"USER ");
strcat(cmd,username);
strcat(cmd,"\r\n");
send(client,cmd,strlen(cmd),0);
RecvMessage(&client);
strcpy(password,"123456");
strcpy(cmd," ASS ");
strcat(cmd,password);
strcat(cmd,"\r\n");
send(client,cmd,strlen(cmd),0);
RecvMessage(&client);
strcpy(cmd,"PASV\r\n");
send(client,cmd,strlen(cmd),0);
recv(client,message,sizeof(message),0);
printf("* %s",message);
sportnum = strchr(message,',');
sportnum = strchr((sportnum+1),',');
sportnum = strchr((sportnum+1),',');
sportnum = strchr((sportnum+1),',') + 1;
temp1 = strchr(sportnum,')');
temp1[0] = '\0';
temp1 = strchr(sportnum,',');
temp2 = temp1 + 1;
temp1[0] = '\0';
portnum = atoi(sportnum)*256 + atoi(temp2);
printf("* %s %s %d*\n",sportnum,temp2,portnum);
connection(&upload,servername,portnum); //第二个socket连接一连就卡死了
strcpy(cmd,"LIST\r\n");
send(client,cmd,strlen(cmd),0);
RecvMessage(&client);
RecvMessage(&upload);
closesocket(client);
closesocket(upload);
WSACleanup();
return(0);
}
void main()
{
// printf("请输入要登陆的IP:");
//scanf("%s",&servername);
strcpy(servername,"192.168.9.28");
// connection1();
if(!connection(&client,servername,21))
xferData();
getch();
}
[em7] [em7] |
|